問題陳述:
給定一個元素數組,我們如何呼叫forEach 循環中的所有非同步處理完成後的回調函數?
解決方案 1:基於計數器的方法
<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 的方法
同步執行:
<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>
非同步執行:
<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:非同步程式庫使用
以上是如何在ForEach迴圈內非同步處理後執行回呼函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!