foreach某一个条件只执行一次_JavaScript: 在forEach中使用async/await

f14d0ed632b5cc549dc7446933b9d65c.png

async/await 这个语法特性功能强大,但是在forEach中使用,就有些捣蛋了。

先看示例:forEach.js

f5ee5cb29b2185da658079a32949a957.png

在 node.js (≥ 7.6.0)环境下运行这段代码, 结果是:

$ node forEach.js$ Done

Chrome76版本浏览器环境中,可以打印出数字,但是Done还是在最前边。

What???

console.log(num) 没有执行!!!

现在我们重写forEach(),来理解一下发生了什么

02ec0bf797c6d8e5a5b1bb70722a4e66.png

forEach() 专业严谨的pollyfill,请前往 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach#Polyfill

现在你会看到,callback会在进入下一次迭代之前,马上执行完,不会等待

要解决这个问题,我们自己写一个asyncForEach()方法

79c23196898bd432f37a67d912af36a7.png

然后更新上边那个示例:

b466e416f41b4a2c630feb74fee126ed.png

同样在node中执行这段代码,我们可以看到:

$ node forEach.js$ Done$ 1$ 2$ 3

越来越接近正确答案了

其实,我们的asyncForEach()方法返回了一个Promise(被包装在了async定义语法里边)。现在还没有达到理想结果,在打印Done之前,还是没有等待每次迭代的打印

再次更新示例,这次把asyncForEach(),包装到async方法中,asyncForEach前边加await才可以等待

de9967cd1f5bcf190bcebd5b2ae734aa.png

最后一次执行,看结果:

$ node forEach.js$ 1$ 2$ 3$ Done

现在我们可以在forEach中正确使用async/await了


相关文章:

JS扩展运算符(Spread Operator)的5种用法

如何使用ES6语法给数组去重

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值