bewegt habe ich eine Anforderung folgendes zu tun:JavaScript Promises - für die Auflösung warten, bevor auf
- Hier finden Sie eine Liste der „Linien“ durch eine interne Funktion aufrufen (getLines()).
- die erste Zeile auswählen, führt eine Aktion
- nach der vorherige Aktion beendet ist, die nächste Zeile ausgewählt und für alle Linien, die die gleiche Aktion
- Repeat tun (3-20 je nach Benutzer)
ich habe den folgenden Code anstelle:
App.Lines = response.data;
for (var _i = 0; _i < App.Lines.length; _i++) {
var makeCallPromise = new Promise(
function(resolve, reject) {
Session.connection.ol.makeCall(App.Lines[_i], callBackFunction(response) {
//this can take up to 30 seconds to respond...
resolve(response.data);
}, errorCallBackFunction(message) {
reject(message.error);
}, bareJid);
}
)
makeCallPromise.then(function(fulfilled) {
console.log("PROMISE WORKED!!!!!", fulfilled);
})
.catch(function(error) {
console.log("PROMISE FAILED!!!!!", error);
});
}
Meine Hoffnung war, dass die Schleife, das Versprechen zu lösen würde warten, bevor sie die Schleife fortgesetzt, aber das ist nicht der Fall. Meine Frage ist, ob es möglich ist, die Schleife anzuhalten, bis die Auflösung abgeschlossen ist. Hinweis - Ich verwende die Bluebird JS-Bibliothek für Versprechungen. Vielen Dank!
Mit freundlichen Grüßen,
Gary
Ich denke, dass Sie müssen 'das Versprechen in irgendeiner Weise return'. Wie in diesem Fall ist "erfüllt" das Schlüsselwort, das Sie in Ihrem Versprechen verwenden. – ZombieChowder
Anstatt die gesamte Sache zu loopen, mach makeCallPromise eine Schleife und schiebe diese Versprechen an ein Array. Dann verwenden Sie Promise.all (Array) und fügen Sie die 'then()' Aufrufe nach dem provect.all hinzu. Das Ergebnis wird sein, dass alle Vorhersagen aufgelöst werden, bevor das erste 'then()' aufgerufen wird, so dass alle Daten erneut durchlaufen werden können.Alternativ verwenden Sie keine Schleife, sondern machen die nächste makeCallPromise, nachdem die erste verrechnet wurde. – Shilly
@Shilly Danke, ich habe versucht, dies in der Antwort von marvel308 mit Promise.each() zu verwenden. Meine Antwort ist, was ich getan habe und was passiert ist. – Gary