Promise.all
平时开发阶段,涉及到多个异步方法的执行时,就会想到使用Promise.all,这个方法可以帮助我将所有的异步操作返回成一个数组给我,然后我可以在他们执行完毕之后,再进行下一步操作。
// 多个promise
const promises = [.....]
Promise.all(promises).then(res => {
console.log(res)
// [.....] 结果
})
但是!有序的结果并不代表这些方法是有序的进行!
排队执行
Promise.all是并发的,代表里面执行的顺序就是无序的,如果我想让里面执行的顺序也是有序的,就需要通过循环来解决
// 多个promise
const promises = [.....]
for(let promise of promises) {
await promise()
}
但是!这样会引起eslint报错,所以不建议!
利用数组的reduce进行排队
网上看到的方法,利用reduce进行排队执行
const promises = [.....]
promises.reduce(
(prev, next) => prev.then(() => next.action()),
Promise.resolve()
);
就是利用了Promise的链式then方法,进行排队