async函数中的循环问题
有这样两段话:
function dbFuc(db) { //这里不需要 async
let docs = [{}, {}, {}];
// 可能得到错误结果
docs.forEach(async function (doc) {
await db.post(doc);
});
}
//上面代码可能不会正常工作,原因是这时三个db.post操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用for循环。
async function dbFuc(db) {
let docs = [{}, {}, {}];
for (let doc of docs) {
await db.post(doc);
}
}
请教为什么forEach
的三个db.post操作将是并发执行,而for循环
不是?谢谢~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
第一种写法相当于调用了三次async函数,async函数即时返回promise,而不会等到await完成后才返回。第二种写法是阻塞写法,await必须等待后面的语句执行完成后才会继续往下走。
应为foreach只是调用了你传入的回调,并不关心结果
for则是要执行代码块语句完成后才会执行下一次循环