非同步forEach 回呼:實現完成回呼
在使用像forEach 這樣的非同步循環的場景中,經常需要觸發一個所有非同步操作完成後回調。本指南介紹了實現此功能的幾種方法。
1.使用簡單的計數器
此技術使用一個計數器,每次處理一個項目時該計數器都會遞增。當計數器達到項目總數時,將呼叫完成回呼。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 鏈,確保非同步任務的同步執行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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中文網其他相關文章!