Wie kann ich die akkumulierten Ergebnisse mehrerer (paralleler) asynchroner Funktionsaufrufe in einer Schleife zurückgeben?
Ich habe eine Funktionfoo
ruft mehrere (parallele) asynchrone Aufrufe in einer Schleife auf. Ich muss irgendwie warten, bis die Ergebnisse aller Anrufe verfügbar sind. Wie kann ich die vollständigen Ergebnisse von @ zurückgebefoo
oder auf andere Weise eine Verarbeitung nach @ auslösall der Daten ist verfügbar?
Ich habe versucht, jedes Ergebnis einem Array hinzuzufügen, aber das Array wird erst nach dem Punkt gefüllt, an dem ich es verwenden muss.
function foo() {
var results = [];
for (var i = 0; i < 10; i++) {
someAsyncFunction({someParam:i}, function callback(data) {
results.push(data);
});
}
return results;
}
var result = foo(); // It always ends up being an empty array at this point.
Hinweis: Diese Frage ist absichtlich generisch im Sinne des bestehenden generischen "Wie kann ich die Antwort von einem asynchronen Anruf zurückgeben?" Frag. Diese Frage hat einige hervorragende Antworten, deckt jedoch nicht mehrere asynchrone Aufrufe ab. Es gibt einige andere Fragen, die mehrere Aufrufe erwähnen, aber ich konnte keine schleifenbasierten finden, und einige hatten nur jQuery-Antworten usw. Ich hoffe hier auf einige allgemeine Techniken, die nicht von einer bestimmten Bibliothek abhängen.