for和forEach的差别是后者不能正常的跳出循环(return、break等),其它的差别不大,把forEach转成for的写法就知道为什么你的for写法可以顺序执行而forEach不能:
for:
const report = async () => { for (let i = 0, len = arr.length; i < len; i++) { await asyncFn(arr[i]); } };
forEach:
const report = async () => { arr.forEach(async (item) => { await asyncFn(item); }); };
上述forEach的写法相当于:
const report = async () => { const asyncFnWrap = async (item) => { await asyncFn(item); }; for (let i = 0, len = arr.length; i < len; i++) { asyncFnWrap(arr[i], i); } };
第一个for循环的 asyncFn 要wait返回后才继续执行,所以是顺序执行,而第二个的 asyncFnWrap 不会阻塞循环。
实际上还是forEach内部实现不支持await的问题
参考:
https://imweb.io/topic/5b3b7d624d378e703a4f4437
声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。