首頁  >  文章  >  web前端  >  如何實現異步 forEach 迴圈的完成回呼?

如何實現異步 forEach 迴圈的完成回呼?

DDD
DDD原創
2024-11-04 13:09:01658瀏覽

How to Implement a Completion Callback for Asynchronous forEach Loops?

非同步forEach 回呼:實現完成回呼

在使用像forEach 這樣的非同步循環的場景中,經常需要觸發一個所有非同步操作完成後回調。本指南介紹了實現此功能的幾種方法。

1.使用簡單的計數器

此技術使用一個計數器,每次處理一個項目時該計數器都會遞增。當計數器達到項目總數時,將呼叫完成回呼。

function callback () { console.log('all done'); }

var itemsProcessed = 0;

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

2.利用 ES6 Promises

Promise 可以建立順序 Promise 鏈,確保非同步任務的同步執行。

function asyncFunction (item, cb) {
  setTimeout(() => {
    console.log('done with', item);
    cb();
  }, 100);
}

let requests = [1, 2, 3].reduce((promiseChain, item) => {
    return promiseChain.then(() => new Promise((resolve) => {
      asyncFunction(item, resolve);
    }));
}, Promise.resolve());

requests.then(() => console.log('done'))

3.使用非同步函式庫

像「async」這樣的函式庫提供了表達所需功能的機制。具體實作會根據選擇的庫的不同而有所不同。

以上是如何實現異步 forEach 迴圈的完成回呼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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