2016-10-13 67 views
0

我有我的代碼問題,無法拿出爲什麼會發生這種情況或解決方案來解決它。我的問題是代碼末尾的updateProduct()函數調用在forEach語句之前被調用,甚至在10個頁面加載中開始一次。我不明白爲什麼這樣做。有誰知道什麼會導致這種情況,以及防止這種情況發生的解決方案是什麼?有時JS代碼運行之前它應該有時

我已經嘗試使用承諾,併成功約7/10頁加載。到目前爲止,這是成功的約9/10頁加載。真的很困惑它在運行之前是如何完成一個循環的。

$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

感謝您的答覆。無論哪種方式工作。當使用angular.forEach時,它似乎突破了大約50%的時間,當我使用javascript forEach時,它似乎只能突破10%的時間。似乎做事的角度方式比那種無角度的方式更經常地被破壞。我想知道是否存在某種緩存錯誤。 – zadees

回答

0

OK,

有人發佈的評論,然後刪除了評論。首先,感謝您的評論,因爲它有助於解決我的困境。我有2個http.get函數,我需要在for循環結束之前完成每個函數。發生了什麼事是我的第一個http.get被掛起並導致錯誤。在加載第二個之前,我甚至沒有想過第一個完成。

我解決了這個有以下幾點:

$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); 
      } 
     }); 
}); 
相關問題