在全部完成后向 Promise.all() 添加 Promise

问题描述 投票:0回答:1

假设我有一个

function(){
  ....
  return Promise.all([p1,p2])
}

我想返回 p1、p2、p3 的承诺,其中 p3 仅在 p1 和 p2 完成后才开始。最好的方法是什么?

以下工作是否可行:

function(){
  ....
  return Promise.all([p1,p2]).then(
    (p) => {
      return Promise.all(p.push(p3));
    })
}

处理被拒绝的承诺有什么特别的吗?

javascript promise
1个回答
0
投票

您所做的在概念上可行,但实际上行不通(假设您仅在第一个

Promise.all()
返回后开始返回 p3 的操作。您还可以使用原始 Promise 中的值:

async function someFunc() {
    ...
    const values = await Promise.all([p1, p2]);
    // start p3 operation now
    const p3 = fn3();
    values.push(p3);
    return Promise.all(values);
}

这是有效的,因为

Promise.all()
接受一系列承诺或值或两者的混合。对于数组中的值(除了 Promise 之外的任何值),它只是立即将它们添加到结果数组中(无需等待 Promise)。

© www.soinside.com 2019 - 2024. All rights reserved.