实现队列
有时候我们不希望所有动作一起发生,而是按照一定顺序,逐个进行。
let promise=doSomething();
promise = promise.then(dosomethingElse);
promise = promise.then(dosomethingElse);
promise = promise.then(dosomethingElse);
......
使用.foreach()
function queue(things){
let promise =Promise.resolve();
things.forEach(thing =>{
promise=promise.then(()=>{
return new Promise(resolve=>{
doThing(thing,()=>{
resolve();
});
})
})
});
return promise;
}
queue(['lots','of','things',....])
常见错误 没有把 .then()产生的新的Promise实例赋给Promise,没有生成队列
使用 .reduce()
function queue(things){
return things.reduce((promise,things)=>{
return promise.then( ()=>{
return new Promise(resolve=>{
doThing(thing,()=>{
resolve();
})
})
})
},Promise.resolve());
}
queue(['lots','of','things',....]);
常见错误:Promise 实现创建之后,会立刻运行执行器代码,所以这个也无法达到队列的效果