2016-10-13 5 views
0

Ich habe ein Problem mit meinem Code und kann nicht herausfinden, warum dies geschieht oder eine Lösung, um es zu lösen. Mein Problem ist der Funktionsaufruf updateProduct() am Ende des Codes wird aufgerufen, BEVOR die forEach-Anweisung sogar eine von 10 geladenen Seiten beginnt. Ich kann nicht verstehen, warum es das tut. Weiß jemand, was dies verursachen würde und was wäre eine Lösung, um dies zu verhindern?Angular JS-Code ausgeführt wird, bevor es zu manchmal

Ich habe versucht, ein Versprechen und das war erfolgreich über 7/10 Seite lädt. Bisher ist dies bei etwa 9/10 Seitenaufladungen erfolgreich. Wirklich verwirrt, wie es eine Schleife vervollständigt, bevor es sogar läuft.

$http.get('file.json').success(function(data) { 
     $scope.products = data; 
     $scope.product_map = {}; 
     var itemsProcessed = 0; 
     $scope.products.forEach(function(item) { 
      $scope.product_map[item.sku] = item; 
      itemsProcessed++; 
      if(itemsProcessed === $scope.products.length) {      
       $scope.seriesId = $scope.series_map[$scope.hashTag].seriesID; 
       updateProduct($scope.series_map[$scope.hashTag].products[0].sku, $scope.series_map[$scope.hashTag].products[0].image); 
      } 
     }); 
    }); 
+0

Vielen Dank für die Antwort. So oder so funktioniert es. Bei der Verwendung von angular.forEach scheint es etwa 50% der Zeit zu brechen, wenn ich das Javascript forEach verwende, scheint es nur etwa 10% der Zeit zu brechen. Scheint, dass die kantige Art, Dinge zu tun, öfter bricht als diese nicht-eckige Art. Ich frage mich, ob es einen Caching-Bug gibt. – zadees

Antwort

0

OK, geschrieben

jemand einen Kommentar und dann diesen Kommentar gelöscht. Zunächst einmal, vielen Dank für Ihren Kommentar, wie es hilfreich war, mein Dilemma zu lösen. Ich habe 2 http.get Funktionen und ich muss für jede der Funktionen abgeschlossen werden, bevor die for-Schleife endet. Was geschah, war, dass mein erstes http.get aufgelegt wurde und einen Fehler verursachte. Ich habe nicht einmal daran gedacht, dass der erste fertig ist, bevor ich den zweiten geladen habe.

ich beschlossen dies mit den folgenden:

$http.get('file1.json').success(function(data) { 
    $scope.series= data; 
    $scope.series_map = {};  
}).then(function successCallback(){ 
    $http.get('file2.json').success(function(data) { 
     $scope.products = data; 
     $scope.products_map = {}; 
     $scope.products.forEach(function(item) { 
      $scope.product_map[item.sku] = item; 
      itemsProcessed++; 
      if(itemsProcessed === $scope.products.length) {      
       $scope.seriesId = $scope.series_map[$scope.hashTag].seriesID; 
       updateProduct($scope.series_map[$scope.hashTag].products[0].sku, $scope.series_map[$scope.hashTag].products[0].image); 
      } 
     }); 
}); 
Verwandte Themen