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 并获取该值。那么apicalltimeoutPromise 返回的承诺是什么? apicalltimeoutPromise 返回什么类型?结果将是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 的返回类型应该是啥? (打字稿)的主要内容,如果未能解决你的问题,请参考以下文章

在promise中超时函数的最佳一般做法是啥[关闭]

JavaScript的Promise.all和Promise.race

如何使用并区分Promise.all和Promise.race?

(转载)理解和使用Promise.all和Promise.race

理解Promise.all,Promise.all与Promise.race的区别,如何让Promise.all在rejected后依然返回resolved状态

前端调用后端接口 超时处理 Promise.race() 应用