2016-10-13 2 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 %를 망가 뜨리는 것처럼 보입니다. 자바 스크립트를 사용할 때마다 약 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); 
      } 
     }); 
});