Blockiert das Warten die Schleife? Oder wird das iwährend des Wartens weiter erhöht?
Nein, warten wird die Schleife nicht blockieren. Ja, wird iwährend der Schleife weiter erhöht.
Ist die Reihenfolge von do_something_with_result () in Bezug auf garantiert sequentiell i? Oder hängt es davon ab, wie schnell die erwartete Funktion für jede ist i?
Die Reihenfolge do_something_with_result()wird nacheinander garantiert, jedoch nicht in Bezug aufi . Dies hängt davon ab, wie schnell die erwartete Funktion ausgeführt wird.
Alle Aufrufe an some_slow_async_function()werden gestapelt, dh wenn dies a do_something_with_result()war , wird angezeigt, consolewie oft die Schleife ausgeführt wird. Danach werden nacheinander alle erwarteten Aufrufe ausgeführt.
Zum besseren Verständnis können Sie das folgende Code-Snippet ausführen:
async function someFunction(){
for (let i=0;i<5;i++){
await callAPI();
console.log('After', i, 'th API call');
}
console.log("All API got executed");
}
function callAPI(){
setTimeout(()=>{
console.log("I was called at: "+new Date().getTime())}, 1000);
}
someFunction();
Man kann deutlich sehen, wie die Zeile console.log('After', i, 'th API call');zuerst für die gesamte Strecke der for-Schleife gedruckt wird und dann am Ende, wenn der gesamte Code ausgeführt wird, Ergebnisse erhalten callAPI().
Wenn also Leitungen nach dem Warten vom Ergebnis der Warte-Anrufe abhängen, funktionieren sie nicht wie erwartet.
Zusammenfassend lässt sich sagen, dass awaitin for-loopkeine erfolgreiche Operation für das Ergebnis von Warteanrufen gewährleistet ist , deren Abschluss einige Zeit in Anspruch nehmen kann.
Wenn man im Knoten eine neo-asyncBibliothek mit verwendet waterfall, kann man dies erreichen.