Ich bin etwas neu zu versprechen und stecken auf der folgenden Übung.Verkettung verschachtelten Versprechen in einer Schleife
Ich habe ein Array von Werten und ich möchte auf jedem einen asynchronen Aufruf ausführen. Im Rückruf möchte ich einen weiteren Anruf auf das Ergebnis des ersten Anrufs ausführen.
Grundsätzlich meine Frustration in der folgenden ist: Die Reihenfolge der Ausführung sein ‚1x2x3x‘ sollte aber die Reihenfolge ist ‚123xxx‘
Mit anderen Worten, wird die Schleife geht bereits auf die nächste Iteration, wenn die Unter/verschachtelte Versprechen der ersten Versprechen noch nicht erfüllt ..
var values = ["1", "2", "3"];
function do(val) {
var deferred = Q.defer();
asyncCall(val)
.then(function(response) {
console.log(val);
asyncCall(response)
.then(function (response) {
console.log('x');
deferred.resolve(true)
});
});
return deferred.promise;
}
var result = do(values[0]);
values.forEach(function(f) {
result = result.then(do(f));
}
es gibt wohl eine einfache Lösung, aber ich bin auf sie stecken.
Vielen Dank für Ihre Antwort. – strai
Vielen Dank für Ihre Antwort. Aber ich verstehe das nicht ganz. Ich habe das latente Muster entfernt und Refactoring mein Code wie folgt: Funktion (Wert) abrufen { return asyncCall (Wert) .then (function (Antwort) { console.log (Antwort); return response.asyncCall2 (); }) .then (Funktion (Antwort) { console.log (Antwort); }); } Ich kann die Rückkehr in den ersten ‚und dann‘ verlassen, aber dann das Versprechen asyncCall2 nicht dann an die zweite übergeben .. – strai
@strai können Sie eine Geige auf jsfiddle.net schaffen das Problem darstellt? Das ist schwer zu lesen –