假设我有一个
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));
})
}
处理被拒绝的承诺有什么特别的吗?
您所做的在概念上可行,但实际上行不通(假设您仅在第一个
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)。