Heim  >  Artikel  >  Web-Frontend  >  Wie führe ich eine Rückruffunktion nach der asynchronen Verarbeitung innerhalb einer ForEach-Schleife aus?

Wie führe ich eine Rückruffunktion nach der asynchronen Verarbeitung innerhalb einer ForEach-Schleife aus?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 15:10:02218Durchsuche

How to Execute a Callback Function After Asynchronous Processing within a ForEach Loop?

Callback-Abschluss nach asynchroner iterativer Verarbeitung

Problemstellung:

Wie können wir bei einem Array von Elementen a aufrufen? Rückruffunktion, nachdem die gesamte asynchrone Verarbeitung innerhalb einer forEach-Schleife abgeschlossen ist?

Lösung 1: Zählerbasierter Ansatz

  • In jedem asynchronen Rückruf einen Zähler erhöhen.
  • Führen Sie den „Fertig“-Rückruf aus, wenn der Zähler die Gesamtzahl der Elemente erreicht.
<code class="javascript">function callback () { console.log('all done'); }

var itemsProcessed = 0;

[1, 2, 3].forEach((item, index, array) => {
  asyncFunction(item, () => {
    itemsProcessed++;
    if(itemsProcessed === array.length) {
      callback();
    }
  });
});</code>

Lösung 2: Versprechensbasierter Ansatz

Synchrone Ausführung:

  • Verketten Sie Versprechen mithilfe von Reduce() und Promise.resolve(), um eine synchrone Ausführung zu gewährleisten.
<code class="javascript">let requests = [1, 2, 3].reduce((promiseChain, item) => {
  return promiseChain.then(() => new Promise((resolve) => {
    asyncFunction(item, resolve);
  }));
}, Promise.resolve());

requests.then(() => console.log('done'));</code>

Asynchrone Ausführung:

  • Erstellen Sie mit map() ein Array von Versprechen.
  • Verwenden Sie Promise.all(), um den „Fertig“-Rückruf aufzurufen, wenn alle Versprechen erfüllt sind gelöst.
<code class="javascript">let requests = [1, 2, 3].map((item) => {
  return new Promise((resolve) => {
    asyncFunction(item, resolve);
  });
});

Promise.all(requests).then(() => console.log('done'));</code>

Lösung 3: Async-Bibliotheksnutzung

  • Nutzen Sie Bibliotheken wie async, um asynchrone Programmiermuster zu vereinfachen.
  • Informationen zu den von der Bibliothek bereitgestellten Callback-Vervollständigungsmechanismen finden Sie in der spezifischen Dokumentation.

Das obige ist der detaillierte Inhalt vonWie führe ich eine Rückruffunktion nach der asynchronen Verarbeitung innerhalb einer ForEach-Schleife aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn