Problem
Wie können wir eine Rückruffunktion ausführen, sobald alles asynchron ist? Operationen innerhalb einer forEach-Schleife wurden abgeschlossen?
Antwort
Array.forEach bietet keine sofort einsatzbereite Lösung für dieses Szenario, aber es gibt sie verschiedene Ansätze, um die gewünschte Funktionalität zu erreichen.
<br>function callback() { console.log('all done'); }</p> <p>var itemsProcessed = 0;</p> <p>[1, 2, 3].forEach(item => {<br> asyncFunction(item, () => {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">itemsProcessed++; if(itemsProcessed === array.length) { callback(); }
});
});
Dieser Ansatz verwendet einen Zähler, der jedes Mal erhöht wird, wenn ein asynchroner Vorgang abgeschlossen ist. Sobald der Zähler die Gesamtzahl der Elemente im Array erreicht, wird die Rückruffunktion aufgerufen.
requests.then(() => console. log('done'))
In diesem Beispiel verketten wir Versprechen, um sicherzustellen, dass jeder asynchrone Vorgang abgeschlossen wird, bevor der nächste beginnt.
<br>const request = [1,2,3].map((item) => {<br>return new Promise((resolve) = > {<br> asyncFunction(item, discover);<br>});<br>})</li></ul> <p>Promise.all(requests).then(() => console.log ('done'));<br>
In diesem Fall verwenden wir die Promise.all-Methode, um alle asynchronen Vorgänge gleichzeitig auszuführen und rufen dann den Rückruf auf, wenn alle abgeschlossen sind.
Asynchrone Bibliotheken wie async bieten Mechanismen, um die gewünschte Funktionalität eleganter auszudrücken.
Das obige ist der detaillierte Inhalt vonWie führe ich einen Rückruf aus, nachdem asynchrone forEach-Aufgaben abgeschlossen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!