如何在不同类型的数组上使用Promise.all() ?



Typescript 4.2.2

给定:

const firstPromises: Promise<First>[] = ...;
const secondPromises: Promise<Second>[] = ...;
return Promise.all([firstPromises, secondPromises]).
then([first, second] => {
// do something
}

我期望firstsecond分别是First[]Second[]类型。相反,输出类型仍然是Promise<First>[]Promise<Second>[]。什么好主意吗?

您不能将嵌套的承诺数组传递给Promise.all。它不知道如何处理它,所以它只是把它直接传递给then,因为它没有看到任何承诺。它只看到一个数组,而不去看。

但是你可以在promise的每个子数组上调用Promise.all,将它们打包成一个promise。然后将它们分别传递给Promise.all,为这两个集合创建一个promise。

const getBool = async () => true
const getString = async () => "foo"
function foo() {
const firstPromises: Promise<boolean>[] = [getBool(), getBool()];
const secondPromises: Promise<string>[] = [getString(), getString()];
return Promise.all([
Promise.all(firstPromises),
Promise.all(secondPromises)
]).then(([first, second]) => {
// first: boolean[]
// second: string[]
})
}

游乐场

相关内容

  • 没有找到相关文章

最新更新