当 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
但是我们得到:
- Single Catch X
- All Done
- Single Catch X
- Single Catch X
最佳答案
根据文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
当第一个 Promise 中的任何一个被拒绝时,它就会被拒绝。
因此,当您的一个 catch block 返回一个被拒绝的 Promise 时,Promise.all 就全部完成了。
关于javascript - Promise.all catch 的奇怪行为在第一个单个 Promise catch 之后运行,然后所有的都被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54464426/