Ich verwende die Kriskowal Q library Versprechen zu halten.Lösen von Versprechen synchron mit Q.all (Versprechen)
Ich schrieb die folgende Funktion zu warten, bis alle Versprechen gelöst worden sind.
function multiplePromises(targetArray) {
var promises = {};
for (var i=0; i<targetArray.length; i++) {
var promise = singlePromise(); // any async. function
promises[i] = promise;
};
return Q.all(promises);
};
und ich nenne es wie folgt: (zum Beispiel ist es synchron)
multiplePromises(targetArray).then(
function(success){
console.log("success");
},
function(error){
console.log("error", error);
}
);
Ich frage mich jedoch, ob es eine Ordnung, in der die Versprechungen werden aufgelöst. I.e. wartet die Funktion, um das nächste Versprechen i+1
auszulösen, bis das Versprechen i
gelöst ist? Oder alternativ ist es wie bei allen anderen Async. Methoden, dass es tatsächlich alle einzelnen Versprechen feuert und nur wartet, bis sie alle fertig sind?
Wenn die zweite der Fall ist, wie würde man diese Funktion umschreiben, um sicherzustellen, dass Versprechen i+1
NUR ausgelöst wird, sobald Versprechen i
gelöst wurde?
Update: Test
habe ich einen Test und setzen:
promises[i] = i;
zu prüfen, ob es löst sycnhronously und es scheint der Fall ist. Es könnte jedoch nur sein, dass meine Async-Funktion schnell genug ist, um sie so schnell zu lösen. Scheint das richtig?
werden jedes Mal, wenn Sie schreiben 'sycnhronously' Ich denke du meinst' serially' - denn es gibt absolut nichts Synchron über Versprechen –
Clear. Irgendwelche Gedanken, wie man es "seriell" macht? – JohnAndrews
ja, sehr leicht, wenn ich nur das 'Q'-Äquivalent von' Promise.resolve() 'würde –