非同步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中文網其他相關文章!