async函数中的循环问题

发布于 2022-09-11 15:29:58 字数 557 浏览 20 评论 0

阮一峰的ES6入门 - 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

豆芽 2022-09-18 15:29:58

第一种写法相当于调用了三次async函数,async函数即时返回promise,而不会等到await完成后才返回。第二种写法是阻塞写法,await必须等待后面的语句执行完成后才会继续往下走。

杯别 2022-09-18 15:29:58

应为foreach只是调用了你传入的回调,并不关心结果

for则是要执行代码块语句完成后才会执行下一次循环

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文