首頁 >web前端 >js教程 >如何在ForEach迴圈內非同步處理後執行回呼函數?

如何在ForEach迴圈內非同步處理後執行回呼函數?

Susan Sarandon
Susan Sarandon原創
2024-11-04 15:10:02274瀏覽

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

非同步迭代處理後回調完成

問題陳述:

給定一個元素數組,我們如何呼叫forEach 循環中的所有非同步處理完成後的回調函數?

解決方案 1:基於計數器的方法

  • 在每個非同步回呼中增加一個計數器。
  • 當計數器達到元素總數時執行「done」回呼。
<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>

解決方案2:基於Promise 的方法

同步執行:

  • 鍊式promise使用reduce()和Promise.resolve()保證同步執行。
<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>

非同步執行:

  • 使用map()建立一個promise陣列。
  • 當所有promise都完成時,使用Promise.all()呼叫「done」回呼已解決。
<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>

解決方案 3:非同步程式庫使用

  • 利用 async 等程式庫來簡化非同步程式模式。
  • 請參閱庫提供的回調完成機制的具體文件。

以上是如何在ForEach迴圈內非同步處理後執行回呼函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn