Promise.all 具有不同的 return 类型

Promise.all with different return types

Promise.all() 获取可迭代作为输入,promise.all 是否可能具有不同的解析类型?

示例为 promise.all([promiseA, promiseB, promiseC], promiseA 和 promiseB returns 无效但 promiseC returns 布尔值?

我试过了,但似乎不可能,而且我不认为可迭代对象可以有不同的类型,但我想确定一下。这是我看到的错误,这是我使用 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}

提前致谢

是的,您可以将它与 return 不同类型的承诺一起使用。 Promise.all(iterable)MDN documentation 所述:

returns a single Promise that resolves when all of the promises passed as an iterable have resolved or when the iterable contains no promises. It rejects with the reason of the first promise that rejects.

已解决的承诺将是:

... fulfilled with an array containing all the values of the iterable passed as argument (also non-promise values).

它的 return 类型是一个数组,但是因为 javascript 数组中的每个元素都可以包含任何类型,所以您可以完全按照您的描述进行操作。下面是一个示例,从控制台输出中您可以看到 undefined 被 returned 用于两个元素,以及 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.
});