2016-08-18 5 views
0

nicht zu aktualisieren Ich habe in meinem Controller eine Funktion, die einige Aufgaben ausführt, ist einer von ihnen zu überprüfen, mit meinem Service, wenn einige Preise oder gültig sind, und wenn Fehler vorhanden sind von der Ausführung des restlichen Codes zu stoppen, das Problem ist, dass meine Variable "error" nicht aktualisiert wird, grundsätzlich in meinem Versprechen, wenn es einen Fehler gibt, inkrementiert die Fehlervariable, und dann nach diesem Fall gibt es irgendwelche Fehler zurück (Stop). Aber kann nicht herausfinden, warum nicht der variable Fehler aktualisiert wird.Versprechen, meine Variablen

Mein Code:

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

Vielleicht den Code formatieren ein wenig? –

+0

Aber da 'validateThings' asynchron ausgeführt wird, werden Sie höchstwahrscheinlich Ihre if-Anweisung treffen, bevor der Fehler aktualisiert wird. –

+0

Also irgendein Vorschlag, wie ich es lösen würde? –

Antwort

0

Ich vermute, Sie meinen, dass dieser Code an:

if(error > 0){ 
    return; 
} 

Fehler immer 0.

ist Da Sie eine for-Schleife mit einem Versprechen haben Wenn der Dienst nach einem Dienst ausgeführt wird, wird der obige Code sofort ausgeführt und Ihr Versprechen wird zu einem späteren Zeitpunkt ausgeführt. Sie müssen sicherstellen, dass alle Ihre Versprechen erfüllt sind, bevor Sie prüfen, ob Fehler vorliegen.

Sie können sich wahrscheinlich etwas tun, wie in einer Antwort auf diese Frage beschrieben: angular $q, How to chain multiple promises within and after a for-loop

Verwandte Themen