Promise.race 的返回类型应该是啥? (打字稿)
Posted
技术标签:
【中文标题】Promise.race 的返回类型应该是啥? (打字稿)【英文标题】:What should the return type of Promise.race be? (Typescript)Promise.race 的返回类型应该是什么? (打字稿) 【发布时间】:2021-12-02 02:02:40 【问题描述】:例如在下面的代码中,响应的类型应该是什么? Typescript 不断给我错误,例如,Type 'unknown' is not assignable to type 'Promise'
const response: [what type???] = await Promise.race([
apicall(),
timeoutPromise(),
]);
【问题讨论】:
Promise.race
从首先解决的任何一个 Promise 返回值的 Promise,然后您 await
该 Promise 并获取该值。那么apicall
和timeoutPromise
返回的承诺是什么?
apicall
和 timeoutPromise
返回什么类型?结果将是ReturnType<typeof apicall> | ReturnType<typeof timeoutPromise>
,但它几乎没有用处。
请提供minimal reproducible example,清楚地表明您面临的问题。理想情况下,有人可以将代码放入像The TypeScript Playground (link here!) 这样的独立IDE 中,然后立即着手解决问题,而无需首先重新创建它。所以应该没有错别字、不相关的错误或未声明的类型或值。
如果您在发布的行上收到错误,那么它与Promise.race()
的返回类型无关;表示apicall()
或timeoutPromise()
的返回类型为unknown
。
【参考方案1】:
Typescript 无法确定哪个 promice 将首先被解决,甚至其中任何一个都将被解决。所以你应该为 Promice.race 提供一个类型:
type PromiseType1 = string
type PromiseType2 = string
const apicall = () => new Promise<PromiseType1>(() => )
const timeoutPromise = () => new Promise<PromiseType2>(() => )
const response = await Promise.race<PromiseType1 | PromiseType2>([
apicall(),
timeoutPromise(),
]);
【讨论】:
以上是关于Promise.race 的返回类型应该是啥? (打字稿)的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript的Promise.all和Promise.race
如何使用并区分Promise.all和Promise.race?
(转载)理解和使用Promise.all和Promise.race
理解Promise.all,Promise.all与Promise.race的区别,如何让Promise.all在rejected后依然返回resolved状态