根据 JavaScript、Node.js:Array.forEach 是否异步?,Array.forEach 是同步的。然而,在我下面的代码中:
输出结果为:
如果结果是我想要的,那么就是这样:
function wait5() {
return new Promise(resolve =>
setTimeout(resolve, 5000));
}
async function main() {
console.log("Start");
[1,2].forEach(async (e) => {
const d = await wait5().then(()=> console.log("5s later") )
})
console.log("This should come last!");
}
main();
输出结果为:
Start
This should come last!
5s later
5s later
连续两个"5秒后"为什么会这样呢?
如果使用普通的for
循环:
async function main() {
console.log("Start");
for (let i=0;i<2;i++) {
const d = await wait5().then(()=> console.log("5s later") )
}
console.log("This should come last!");
}
如果结果是我想要的,那么就是这样:
Start
5s later
5s later
This should come last!
.forEach()
机制本身不执行任何异步工作。但是,传递给回调函数的代码可以自由地执行任何操作。需要注意的是,这并不改变.forEach()
的同步特性。 - Pointyawait
。 - zero298forEach
没有任何关系,而与声明回调函数为async
的[1,2].forEach(async (e) =>
有关。 - gforce301.forEach()
回调的调用返回的Promise。 - Pointy