Ich habe verkettbare Versprechen, die in einer einzigen Serie funktionieren, aber jetzt möchte ich diese serios der Kette innerhalb for Schleife nennen, aber es funktioniert nicht wie erwartet.Verkettet Versprechen in For-Schleife wird nicht ordnungsgemäß ausgeführt
siehe meine demo plunker und sehen Sie die Ausgabe in der Konsole.
unten ist die Struktur meiner Verkettung verspricht. Ich möchte alle publicIP, die von funTwo
zurückgegeben wird; aber ich möchte funThree()
abschließen und dann alle publicIP erhalten möchten. Wie ich weiß, macht $q.when()
einen Wert in Versprechen Objekt.
aber Sie können die console.log('pA', promiseArray);
sehr vor ausgeführt sehen und console.log('res three');
und warum successHandler
und finally
vorher genannt?
hier sicher bin ich etwas fehlt, ein return;
in der richtigen Stelle zu schreiben, mich freundlich kann helfen, wie alle Funktion in der for-Schleife ausgeführt und das Rück ein Datenfeld nach, dass für Schleifenenden, die in successHandler
erneut versucht werden kann
MyService.funZero()
.then(function(response) {
console.log(response);
var promiseArray = [];
for(var i = 0; i < 2 ; i++) {
console.log('I', i);
MyService.funOne()
.then(MyService.funTwo)
.then(function(res2) {
console.log('res two', res2);
publicIP = res2.ip;
console.log('i', publicIP);
promiseArray.push({'ip': publicIP});
return MyService.funThree(publicIP);
})
.then(function() {
console.log('res three');
})
} // for loop ends
console.log('pA', promiseArray);
return $q.when(promiseArray);
})
.then(function(res4){
console.log('after for loop', res4);
})
.then(successHandler)
.catch(errorHandler)
.finally(final, notify);
Mögliches Duplikat [JavaScript-Verschluss Innenschleifen - einfaches praktisches Beispiel] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple- praktisches Beispiel) – Phil
das ist kein Duplikat @Phil .. Ich habe das schon gelesen, aber habe nicht gelernt, wie man es in angularJS anwendet. –
Sie haben Recht, ich entschuldige mich. – Phil