2016-08-18 48 views
0

我在我的控制器中執行一些任務的函數,其中一個是檢查使用我的服務,如果一些價格或有效,如果有任何錯誤停止執行代碼的其餘部分,問題是我的變量「錯誤」沒有被更新,基本上在我的承諾中,當有錯誤時它會增加錯誤變量,然後在這種情況之後有任何錯誤返回(停止)。但不能弄清楚爲什麼不更新變量錯誤。承諾不更新我的變量

我的代碼:

function apply(){ 
var error = 0; 
      if(vm.costPrice){ 

       vm.name=""; 


       for (var i = 0; i < vm.costPrice.length; i++) { 

         (function (i) { 

          if (isChecked(vm.costPrice[i].id)) { 

          //create later a service that accepts array of data (less requests = better performance) 
          MyService.validateThings(vm.product.pvp, vm.costPrice[i].discount_price) 
           .then(function (response) { 

            }, 
            function (response) { 

            error++; 
             vm.isErrorCostPrice = true; 
             if (i > 0) { 
              vm.name += ' '; 
             } 
             vm.name += vm.costPrice[i].condition.name; 

            }); 

          } 

          }(i)); 

       } 

       if(error > 0){ 
       return; 
       } 

// Other code above... 

} 
+0

也許格式化有點代碼:

因爲在這個問題上的答案描述你或許可以做些什麼? –

+0

但是,這是因爲'validateThings'異步運行,所以在更新錯誤之前,您很可能會碰到if語句。 –

+0

因此,任何建議我將如何解決它? –

回答

0

我猜你的意思是,在這個代碼:

if(error > 0){ 
    return; 
} 

誤差始終爲0

既然你有一個用一個承諾環在一些服務之後執行,上面的代碼會立即運行,並且您的承諾將在稍後運行。在檢查是否有任何錯誤之前,您需要確保您的所有承諾都已完成。 angular $q, How to chain multiple promises within and after a for-loop