promise.all.catch(e)
的参数是什么是一组错误还是对象?
Promise.all([promise1, promise2, ..])
.then((result1, result2,..)=>{})
.catch((error1,error2..???)=>{
})
我们如何获得一系列错误?如果不是Promise.all然后如何?
答案 0 :(得分:1)
根据spec
all函数返回一个新的承诺,用一个实现 已通过的承诺的履行值数组,或拒绝承诺 第一次通过承诺拒绝的原因。它解决了所有问题 传递迭代的元素在运行此算法时承诺。
当使用参数onRejected调用catch方法时,返回以下内容 采取的步骤:
- 让我们承诺这个价值。
- 返回调用(承诺,“然后”,“未定义,onRejected”)。
因此,第一次通过承诺拒绝的原因是promise.all.catch
的参数。
答案 1 :(得分:0)
简单Promise
和Promise.all
的错误处理没有区别。
这意味着:
Promise.all([p1, p2, p3, ...])
.then((v) => {
// ...
})
.catch((err) => {
// ...
});
捕获中有一个错误。
Promise.all
返回一个数组(在当时)给定Promises
的所有结果。
如果出现错误抛出错误,您捕获(1错误)。
编辑: 关于获取所有错误的事实,这似乎是真正的问题
Javascript是单线程的,这意味着它一次只能执行一个函数。 Javascript异步仅表示I / O不会阻塞。
Promise.all的工作方式是在第一次遇到错误时抛出它。并阻止其他承诺。所以你不能有多个错误。
答案 2 :(得分:0)
您可能想要实现的目标需要采用不同的方法:
const promises = [p1, p2];
const promisesWithExceptionInfo = promises.map(p => {
return new Promise(resolve => {
p.then(result => resolve({result})).catch(error => resolve({error}));
});
});
// now your promises will always be resolved but contain either a result or an error
Promise.all(promisesWithExceptionInfo).then(res => {
// res is an array of objects where each promise result or error can be evaluated
});