async函数中的循环问题

阮一峰的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循环不是?谢谢~

阅读 4.1k
2 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题