Es gibt viele Antworten für diese Frage, aber die meisten von ihnen synchronisieren die Auflösung der Versprechen (d. H. Das Ende der Ausführung, nicht der Beginn der Ausführung).Laufende Versprechen sequenziell: jedes Versprechen startet, nachdem das vorherige endet
This solution übernimmt wir bereits eine Reihe von Funktionen:
var funcs = [foo, bar, baz, qux];
Wie solche Anordnung ohne die Ausführung der Funktionen erstellt wird? Ich habe dies versucht:
var promises = [];
for (i = 0 ; i < 3, ++i){
promises.push(someFunction(i))
}
function someFunction(i) {
return new Promise((resolve, reject) => {
console.log(i);
resolve(i);
});
}
Bis Ende für Schleife das Versprechen Array gefüllt wird, aber someFunction
bereits ausgeführt 4 mal. Mit Promise.all
oder Q
Sequenzen nur Sequenzen verrechnet.
Wie kann ich die wahre Synchronisation des Anfangs dieser Funktionen erreichen? Insbesondere:
foo().then(bar).then(baz).then(qux);
prüfen diese Antwort: https://stackoverflow.com/a/44371402/7636961 – wostex
ich das in Versprechen API gebaut glaube nicht, dass über diese Funktion verfügt. Sie könnten versuchen, Promise.reduce von Bluebird: http://bluebirdjs.com/docs/api/promise.reduce.html –
@KarelG: genau meine Frage! Wie kann ich es in ein Array schieben, ohne es anzurufen? Ich möchte diese Versprechen in einer For-Schleife on the fly erstellen. – Ari