除了依赖 async promise-fun 等工具库,最常用的队列操作就是 Array.prototype.reduce()
了:
最后一个值 0 是起始值,每次 reduce 返回的值都会作为下次 reduce 回调函数的第一个参数,直到队列循环完毕,因此可以进行累加计算。
那么将 reduce
的特性用在 Promise 试试:
当上一个 Promise 开始执行(previousPromise.then
),当其执行完毕后再调用下一个 Promise,并作为一个新 Promise 返回,下次迭代就会继续这个循环。
测试代码
得到的输出是:
promise 1
promise 2
promise 3
基本原理
Reduce
是同步执行的,在一个事件循环就会完成(更多请参考 精读《Javascript 事件循环与异步》),但这仅仅是在内存快速构造了 Promise 执行队列,展开如下:
Reduce
的作用就是在内存中生成这个队列,而不需要把这个冗余的队列写在代码里!
async/await
扩展阅读