2016-08-18 1 views
0

私はいくつかのタスクを実行する関数を持っています。そのうちの1つは、価格や有効な値があれば私のサービスを使ってチェックし、問題は私の変数 "error"が更新されていないということです。基本的に私の約束では、エラーが発生したときにエラー変数をインクリメントし、その後にエラーが返されます(停止)。しかし、なぜ変数が更新されていないのか理解できません。私の変数を更新しないことを約束します

マイコード:

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

関連する問題