💾Promise.inSeries()
JS ⟩ async ⟩ Promise ⟩ chaining ⟩ Promise.inSeries()
💾 replit:Promise in series
// 🔸 Promise.inSeries()
Promise.inSeries = function(promises) {
// store results from promises
const results = [];
// ⭐ start with a "trivial" Promise
let p = Promise.resolve();
// ⭐ Promise chain of arbitrary length
for (const promise of promises) {
p = p.then(value => {
results.push(value); // save resolved value
return promise; // return next promise
});
}
// ⭐ return a Promise for `results`.
return p.then(value => {
results.push(value); // ⭐ save last resolved value
results.shift(); // ⭐ remove value from first "trivial" promise
return results;
});
};
💈範例:
// test 1
Promise.inSeries([
Promise.resolve(1),
Promise.reject('error in promise #2'),
Promise.resolve(3),
]).then(results =>
console.log(results)
).catch(error => {
console.log(error) // ⛔ rejected: "error in promise #2"
});
// test 2
Promise.inSeries([
new Promise(resolve => setTimeout(resolve, 2000, 1)),
new Promise(resolve => setTimeout(resolve, 1000, 2)),
Promise.resolve(3),
]).then(results =>
console.log(results) // ✅ fulfilled: [ 1, 2, 3 ]
).catch(error => {
console.log(error)
});
Last updated