Promise.All捕获的奇怪行为在第一个promise捕获之后运行,然后全部拒绝

时间:2019-01-31 15:54:01

标签: javascript es6-promise

当catch()方法在第一个单个promise之后且在所有其他promise之前触发时,发现JavaScript Promise.all()的行为很奇怪。有人发现过这种奇怪的东西吗?我想知道这背后发生了什么?

let promises = [];
[1, 2, 3].forEach((value) => {
    const promise = new Promise((s, e) => {
        setTimeout(() => {
            e('Single Catch ' + value);
        }, Math.random() * 100);
    }).catch((err) => {
        console.log(err);
        return Promise.reject(err);
    });
    promises.push(promise);
});
Promise.all(promises).catch((err) => {
    console.log('All Done');
});

预期结果将是:

- Single Catch X
- Single Catch X
- Single Catch 1
- All Done

Bu相反,我们得到了:

- Single Catch X
- All Done
- Single Catch X
- Single Catch X

1 个答案:

答案 0 :(得分:2)

根据文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

当第一个承诺中的任何一个拒绝时,它就会拒绝。

因此,当您的一个catch块返回被拒绝的诺言时,Promise.all全部完成。