Promise.all:promise.all.catch(e)的参数是什么

时间:2017-11-17 10:21:52

标签: javascript

promise.all.catch(e)

的参数是什么

是一组错误还是对象?

Promise.all([promise1, promise2, ..])
.then((result1, result2,..)=>{})
.catch((error1,error2..???)=>{

})

我们如何获得一系列错误?如果不是Promise.all然后如何?

3 个答案:

答案 0 :(得分:1)

根据spec

  

all函数返回一个新的承诺,用一个实现   已通过的承诺的履行值数组,或拒绝承诺   第一次通过承诺拒绝的原因。它解决了所有问题   传递迭代的元素在运行此算法时承诺。

因此promise.catch

  

当使用参数onRejected调用catch方法时,返回以下内容   采取的步骤:

     
      
  • 让我们承诺这个价值。
  •   
  • 返回调用(承诺,“然后”,“未定义,onRejected”)。
  •   

因此,第一次通过承诺拒绝的原因是promise.all.catch的参数。

答案 1 :(得分:0)

简单PromisePromise.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
});