2016-10-13 37 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); 
      } 
     }); 
}); 
相关问题