Explorar el Código

HUE-6688 [autocomplete] Make sure all running ajax requests are cancelled when closing the autocomplete

Johan Ahlen hace 8 años
padre
commit
9d22196
Se han modificado 1 ficheros con 26 adiciones y 26 borrados
  1. 26 26
      desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

+ 26 - 26
desktop/core/src/desktop/static/desktop/js/sqlAutocompleter3.js

@@ -108,7 +108,7 @@ var AutocompleteResults = (function () {
 
     self.entries = ko.observableArray();
 
-    self.lastKnownRequests = {};
+    self.lastKnownRequests = [];
     self.activeDeferrals = [];
 
     self.loadingKeywords = ko.observable(false);
@@ -206,9 +206,9 @@ var AutocompleteResults = (function () {
   AutocompleteResults.prototype.cancelRequests = function () {
     var self = this;
 
-    Object.keys(self.lastKnownRequests).forEach(function (key) {
-      self.apiHelper.cancelActiveRequest(self.lastKnownRequests[key]);
-    });
+    while (self.lastKnownRequests.length) {
+      self.apiHelper.cancelActiveRequest(self.lastKnownRequests.pop());
+    }
   };
 
   AutocompleteResults.prototype.update = function (parseResult) {
@@ -537,7 +537,7 @@ var AutocompleteResults = (function () {
         }
 
         var database = suggestTables.identifierChain && suggestTables.identifierChain.length === 1 ? suggestTables.identifierChain[0].name : self.activeDatabase;
-        self.lastKnownRequests.fetchTables = self.apiHelper.fetchTables({
+        self.lastKnownRequests.push(self.apiHelper.fetchTables({
           sourceType: self.snippet.type(),
           databaseName: database,
           successCallback: function (data) {
@@ -564,7 +564,7 @@ var AutocompleteResults = (function () {
           silenceErrors: true,
           errorCallback: tablesDeferred.reject,
           timeout: AUTOCOMPLETE_TIMEOUT
-        });
+        }));
       };
 
       if (self.snippet.type() == 'impala' && self.parseResult.suggestTables.identifierChain && self.parseResult.suggestTables.identifierChain.length === 1) {
@@ -1097,7 +1097,7 @@ var AutocompleteResults = (function () {
       // Last one is either partial name or empty
       parts.pop();
 
-      self.lastKnownRequests[fetchFunction] = self.apiHelper[fetchFunction]({
+      self.lastKnownRequests.push(self.apiHelper[fetchFunction]({
         pathParts: parts,
         successCallback: function (data) {
           if (!data.error) {
@@ -1120,7 +1120,7 @@ var AutocompleteResults = (function () {
         silenceErrors: true,
         errorCallback: pathsDeferred.reject,
         timeout: AUTOCOMPLETE_TIMEOUT
-      });
+      }));
     } else {
       pathsDeferred.reject();
     }
@@ -1135,7 +1135,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingJoins, joinsDeferred);
       joinsDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptPopularJoins = self.apiHelper.fetchNavOptPopularJoins({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptPopularJoins({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1200,7 +1200,7 @@ var AutocompleteResults = (function () {
           joinsDeferred.resolve(joinSuggestions);
         },
         errorCallback: joinsDeferred.reject
-      });
+      }));
     } else {
       joinsDeferred.reject();
     }
@@ -1215,7 +1215,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingJoinConditions, joinConditionsDeferred);
       joinConditionsDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptPopularJoins = self.apiHelper.fetchNavOptPopularJoins({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptPopularJoins({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1253,7 +1253,7 @@ var AutocompleteResults = (function () {
           joinConditionsDeferred.resolve(joinConditionSuggestions);
         },
         errorCallback: joinConditionsDeferred.reject
-      });
+      }));
     } else {
       joinConditionsDeferred.reject();
     }
@@ -1270,7 +1270,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingAggregateFunctions, aggregateFunctionsDeferred);
       aggregateFunctionsDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptTopAggs = self.apiHelper.fetchNavOptTopAggs({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopAggs({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1336,7 +1336,7 @@ var AutocompleteResults = (function () {
           aggregateFunctionsDeferred.resolve(aggregateFunctionsSuggestions);
         },
         errorCallback: aggregateFunctionsDeferred.reject
-      });
+      }));
     } else {
       aggregateFunctionsDeferred.reject();
     }
@@ -1373,7 +1373,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingGroupBys, groupBysDeferred);
       groupBysDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptTopColumns = self.apiHelper.fetchNavOptTopColumns({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopColumns({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1403,7 +1403,7 @@ var AutocompleteResults = (function () {
           }
         },
         errorCallback: groupBysDeferred.reject
-      });
+      }));
     } else {
       groupBysDeferred.reject();
     }
@@ -1419,7 +1419,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingOrderBys, orderBysDeferred);
       orderBysDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptTopColumns = self.apiHelper.fetchNavOptTopColumns({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopColumns({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1449,7 +1449,7 @@ var AutocompleteResults = (function () {
           }
         },
         errorCallback: orderBysDeferred.reject
-      });
+      }));
     } else {
       orderBysDeferred.reject();
     }
@@ -1464,7 +1464,7 @@ var AutocompleteResults = (function () {
       initLoading(self.loadingFilters, filtersDeferred);
       filtersDeferred.done(self.appendEntries);
 
-      self.lastKnownRequests.fetchNavOptTopFilters = self.apiHelper.fetchNavOptTopFilters({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopFilters({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1509,7 +1509,7 @@ var AutocompleteResults = (function () {
           filtersDeferred.resolve(filterSuggestions);
         },
         errorCallback: filtersDeferred.reject
-      });
+      }));
     } else {
       filtersDeferred.reject();
     }
@@ -1526,7 +1526,7 @@ var AutocompleteResults = (function () {
         && self.parseResult.suggestTables.identifierChain.length === 1
         && self.parseResult.suggestTables.identifierChain[0].name ? self.parseResult.suggestTables.identifierChain[0].name : self.activeDatabase;
 
-      self.lastKnownRequests.fetchNavOptTopTables = self.apiHelper.fetchNavOptTopTables({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopTables({
         database: db,
         sourceType: self.snippet.type(),
         silenceErrors: true,
@@ -1563,7 +1563,7 @@ var AutocompleteResults = (function () {
           });
         },
         errorCallback: popularTablesDeferred.reject
-      });
+      }));
     } else {
       popularTablesDeferred.reject();
     }
@@ -1578,7 +1578,7 @@ var AutocompleteResults = (function () {
     if (HAS_OPTIMIZER && suggestColumns && suggestColumns.source !== 'undefined') {
       initLoading(self.loadingPopularColumns, popularColumnsDeferred);
 
-      self.lastKnownRequests.fetchNavOptTopColumns = self.apiHelper.fetchNavOptTopColumns({
+      self.lastKnownRequests.push(self.apiHelper.fetchNavOptTopColumns({
         sourceType: self.snippet.type(),
         timeout: AUTOCOMPLETE_TIMEOUT,
         defaultDatabase: self.activeDatabase,
@@ -1657,7 +1657,7 @@ var AutocompleteResults = (function () {
           });
         },
         errorCallback: popularColumnsDeferred.reject
-      });
+      }));
     } else {
       popularColumnsDeferred.reject();
     }
@@ -1766,7 +1766,7 @@ var AutocompleteResults = (function () {
         identifierChain = identifierChain.slice(1);
       }
 
-      self.lastKnownRequests.fetchFields = self.apiHelper.fetchFields({
+      self.lastKnownRequests.push(self.apiHelper.fetchFields({
         sourceType: self.snippet.type(),
         databaseName: database,
         tableName: table,
@@ -1802,7 +1802,7 @@ var AutocompleteResults = (function () {
         },
         silenceErrors: true,
         errorCallback: errorCallback
-      });
+      }));
     };
 
     // For Impala the first parts of the identifier chain could be either database or table, either: