最近有个场景,需要实现Promise的循环同步。
类似这样:1Promise.resolve().then(()=>promise1).then(()=>promise2).then(()=>promise3)...
现在需要对一个数组,执行一长串的promise操作。在不使用 async的情况下,只用for循环完成多个promise的操作。
这里我们使用Array.reduce
来解决Promise的循环同步。
Array.reduce解决循环同步
|
|
reduce 函数的callback接受4个参数,分别是previousValue
,currentValue
,currentIndex
,array
。
previousvalue
的值可以是一个Promise
对象。
我们给reduce
的callback
函数一个初始值,initialValue
设为Promise.resolve()
在每一次callback返回一个Promise对象,而这个对象是对previousValue对象的一个封装,将previousValue.then(()=>promiseInstance)返回,又在下一次的回调函数中,previousValue为上个回调函数的返回值。
|
|
如此便能解决 Promise的循环串行问题
Promise.all()解决循环异步
如果不需要保证每个promise都是同步的,而是只需保证所有的promise最终都已执行完毕,可以使用Promise.all()
。
Promise.all()
用于在所有的promise结束后调用,返回一个promise。
这种解决方案下的promise异步执行,Promise.all()
会等所有的promise执行完毕后调用,返回一个最终的promise
。
|
|