為確保Array每次循環等待上次操作完成,必須在每次循環中使用異步函數
const arr = [1, 2, 3]; async function fn() { await arr.reduce(async (accumulator, currentValue) => { await accumulator; await sleep(2000); console.log(currentValue); }, undefined); }; fn(); async function sleep(arg) { return new Promise(resolve => { setTimeout(function () { resolve(arg); }, arg); }) }
執行結果如下:
可見,每次都等待了2秒,每次循環都會等待上次完成。所以就實現了array循環同步執行,每次執行都等待上次循環完成。
參考:https://advancedweb.hu/how-to-use-async-functions-with-array-foreach-in-javascript/