💾Promise.inSeries()

JSasyncPromisechaining ⟩ 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