β

如何在js循环中使用async/await

在开发maty.js时,遇到一个数组任务,数组项是内部异步执行的函数,期望是同步依次执行每项函数,每项函数执行完本身的异步任务后,继续下一项。

刚开始单纯使用map来循环执行,并且await每项函数。如下所示:


starters.map(async (fn, i)=> {
  console.log('++++++++++: ', i)
  await fn(ctx);
});

结果是依次先输出了索引i,而不是阻塞每次循环,按期望执行。

搬出Google大法,在https://blog.lavrton.com/javascript-loops-how-to-handle-async-await-6252dd3c795中得到解决办法,对在 for…of 循环语法中使用await是有效的。


for (const fn of starters) {
  await fn(ctx);
}

同时文章中指出使用Promise.all,是无法解决当前问题的,因为all方法是并行运行的。很奇怪为什么没有串行执行的原生方法。

作者:听雨~昨夜卧听风吹雨,不若相忘于江湖。
JAVA入道,却更擅长于WEB前端技术,最喜欢jQuery库,还喜欢学设计,风格简约·简洁·清整。爱好古中国文化,崇尚老庄自然自由之道。不喜欢规划,也不喜欢计划,因为赶不上变化。却喜欢打有准备的仗,谋
原文地址:如何在js循环中使用async/await, 感谢原作者分享。