当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
答案 0 :(得分:2)
根据文档https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
当第一个承诺中的任何一个拒绝时,它就会拒绝。
因此,当您的一个catch块返回被拒绝的诺言时,Promise.all全部完成。