Promise实现队列

时间:2022-12-10 05:18:15

有时候我不希望所有动作一起发生,而是按照一定顺序,逐个进行

 var promise=doSomething();
promise=promise.then(doSomethingElse);
promise=promise.then(doSomethingElse2);
promise=promise.then(doSomethingElse2);

// forEach 实现

 function queue(things){
let promise=Promise.resolve();
things.forEach(element => {
promise=promise.then(()=>{
return new Promise(resolve=>{
setTimeout(() => {
console.log(element)
resolve('ok');
}, 1000);
});
})
});
}
queue(['h1','h2','h3']);

// reduce 实现

 function queue2(things) {
let promise = Promise.resolve();
things.reduce(function (totel, item) {
return totel.then(() => {
return new Promise(resolve => {
setTimeout(() => {
console.log('reduce', item)
resolve('ok');
}, 1000);
});
});
}, promise)
}
queue2(['h1', 'h2', 'h3']);