如何将Promise返回到Promise.all()。 Promise.all()返回Promise

时间:2020-04-23 12:08:07

标签: javascript node.js promise

我的问题很简单。 Promise.all()方法可以返回Promise吗? 让我解释一下:

function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    Promise.all(queue)
        .then(() => return Promise.resolve())
        .catch(err => {
            return Promise.reject(err);
        });    
}

使用此功能,如果Promise的{​​{1}}之一被拒绝,我想拒绝一个错误。 实际上,我有 “无法处理拒绝” 错误,我认为是因为这一点。所以,我正在尝试其他方法。

queue

此更改后,我再次遇到此问题,但是我认为第二种方法是正确的,但我不知道为什么它不起作用。

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

问题出在你的

return Promise.reject(err);
在两个摘要中均

。这样会导致拒绝的Promise整个问题都解决了,并且如果未在任何地方处理该拒绝,您将收到“未处理的拒绝”警告。

如果simpleFunction的使用者需要使用Promise,请确保它也捕获了该承诺,并确保return进行Promise.all调用。

您无需将Promise.all调用包装在.thencatch中,只需返回Promise.all本身即可。这将创建一个Promise,它会拒绝数组中的任何Promises拒绝,这就是您想要的:

function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    return Promise.all(queue);
}
simpleFunction()
  .catch((err) => {
    // handle errors
  });

或者,如果消费者不使用Promise,则.catch中的simpleFunction,但不要创建被拒绝的Promise ,只需处理错误(或在catch中忽略它,尽管这不是一个好主意):

function simpleFunction() {
    let queue = [];
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);
    queue.push(*PROMISE1*);

    Promise.all(queue)
      .catch((err) => {
        // handle errors here
        // do NOT call `Promise.reject`,
        // because then the rejection will be unhandled
      });
}