Search code examples
javascriptpromisees6-promise

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 which promise is failing. Passing a callback as a second parameter to the .then method does not help much, as I know that a promise is rejecting but not which promise is rejecting.

A stack trace does not help either, as the first item is the Promise.all()'s error handler. A line number from the Error object passed to the first parameter of the second function passed to the try function of the Promise.all() is simply the line number of the line where I log the line number.

Does anybody know of a way to find out which promise is rejecting?


Solution

  • 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).