Typescript 4.2.2
给定:
const firstPromises: Promise<First>[] = ...;
const secondPromises: Promise<Second>[] = ...;
return Promise.all([firstPromises, secondPromises]).
then([first, second] => {
// do something
}
我期望first
和second
分别是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[]
})
}
游乐场