总字数 462
预计阅读时间 2 分钟
JS当中的循环都是非异步的
包括但不限于
- Array.prototype中的
forEach
for ... in
语法for ... of
语法
所以如果要在循环内的异步全部完成后做某些事情
例如
1 | // 这里我只是简单构造了一个异步 |
上面的写法根据事件队列的机制, 显然会先输出end, 再输出数组元素的值
当然我们可以在Promise的resolve函数当中判断是否到达了数组最后一个元素, 把输出end的操作写进resolve函数里面
显然这不够优雅, 而且很多时候也不方便这样做
实现方式
Promise.all
1 | const arr = [100, 200, 300] |
为了比较执行性能的差异, 加了一个计时 ( Nodejs环境运行 )
async/await
1 | const arr = [100, 200, 300]; |
由于await必须用在async修饰的函数当中, 所以包装了一层
实际执行时间与Promise.all差不多
One by one
这种方式效率最低,有点类似于同步语言中的循环,一个接着一个执行,耗时自然也就是所有异步方法耗时的总和。对资源的消耗最小。
1 | const arr = [100, 200, 300]; |