当async/await遇上forEach

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

真诚赞赏,手留余香
赞赏
随机推荐
Wordpress 学习笔记 1 常用
PHP文件上传进度:文件切片上传
近几年前端技术盘点以及 2016 年技术发展方向
php5.4环境下安装ECshop出现Strict Standards的解决方案
PDO 使用预处理 LIMIT
加载占位图 Skeleton Screen Loading
filezilla server FTP 安装报错 "could not load TLS network. Aborting start of administration interface"
Windows 批处理,Winrar 自动备份 Apache 每个网站到单独文件中
Node.js 断言模块 Assert 模块
Electron小试
QQ号

微信联系我

夜间模式切换
回到顶部