Promise.all具有不同的返回类型[关闭]

问题描述 投票:-3回答:1

Promise.all()获取一个可迭代的输入,promise.all可能有不同的解析类型吗?

示例是promise.all([promiseA,promiseB,promiseC],promiseA和promiseB返回void但promiseC返回boolean?

我试过,似乎不可能,我也不认为迭代可以有不同的类型,但想确定。这是我看到的错误,这是我的TypeScript代码

PromiseC: Promise<boolean>;
PromiseA: Promise<void>;
PromiseB: Promise<void>;

const promises = [this.promiseA, this.promiseB];
if (!flag) {
   promises.push(this.promiseC); 
}
Promise.all(promises).then(() => { // do something}

enter image description here

提前致谢

javascript typescript promise iterable
1个回答
2
投票

是的,您可以将它用于返回不同类型的承诺。 Promise.all(iterable)作为MDN documentation州:

返回单个Promise,当作为iterable传递的所有promise已解决或者iterable不包含promise时,它将解析。它拒绝承认拒绝的第一个承诺。

已解决的承诺将是:

...用包含作为参数传递的iterable的所有值的数组(也是非promise值)来实现。

它的返回类型是一个数组,但由于javascript数组中的每个元素都可以包含任何类型,因此您可以完全按照您的描述进行操作。下面是一个示例,从控制台输出中可以看到undefined返回两个元素,以及NumberString类型。

var p1 = new Promise((resolve, reject) => {
  resolve(console.log("Doing work...then I return undefined like a function does"))
})
var p2 = undefined;
var p4 = Promise.resolve(true)
var p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("foo");
  }, 100);
}); 

Promise.all([p1, p2, p3, p4]).then(values => { 
  console.log(values); // Array contains multiple types.
});
© www.soinside.com 2019 - 2024. All rights reserved.