错误写法

使用forEach循环

1
2
3
4
5
6
function fn() {
arr.forEach(async () => {
await syncMethod();
});
}
// 结果:多个异步函数syncMethod()会并行执行。

正确写法

使用for i循环

1
2
3
4
5
6
async function fn() {
for (let i = 0; i < arr.length; i++) {
await syncMethod();
}
}
// 结果:在上一个异步函数执行结束后再开始执行下一个。

原因

forEach的回调函数都是同步调用的,在forEach的回调里进行异步操作,每次遍历进行的这些异步操作会并行执行。在 JavaScript 中几乎所有的回调函数都是异步调用的,但是forEach方法的回调函数是同步调用的,同样,find()findIndex()函数也都是同步调用回调函数的。