Skip to content Skip to sidebar Skip to footer

Promise.all Find Which Promise Rejected

In my code, I am using Promise.all() to run code asynchronously once some promises have all fulfilled. Sometimes, one promise will fail, and I'm not sure why. I would like to know

Solution 1:

You can use an onreject handler on each promise:

Promise.all(promises.map((promise, i) =>
    promise.catch(err => {
        err.index = i;
        throw err;
    });
)).then(results => {
    console.log("everything worked fine, I got ", results);
}, err => {
    console.error("promise No "+err.index+" failed with ", err);
});

In general, every rejection reason should contain enough information to identify the issue that you need to handle (or log).

Solution 2:

this wrapper will wait for and return every result and/or rejection

the returned array will be objects

{ // this one resolved
    ok: true,
    value: 'original resolved value'
},
{ // this one rejected
    ok: false,
    error: 'original rejected value'
},
{ // this one resolved
    ok: true,
    value: 'original resolved value'
},
// etc etc

One caveat: this will wait for ALL promises to resolve or reject, not reject as soon as the first rejection occurs

let allresults = function(arr) {
    returnPromise.all(arr.map(item => (typeof item.then == 'function' ? item.then : Promsie.resolve(item))(value => ({value, ok:true}), error => ({error, ok:false}))));
}

allresults(arrayOfPromises)
.then(results => {
    results.forEach(result => {
        if(result.ok) {
            //gooddoThingsWith(result.value);
        } else {
            // badreportError(result.error);
        }
    });
});

Post a Comment for "Promise.all Find Which Promise Rejected"