【问题标题】:Return type of async functions which return un-awaited promises返回未等待承诺的异步函数的返回类型
【发布时间】:2019-09-19 12:39:03
【问题描述】:

我遇到了一个库,我需要从异步函数中返回一个未等待的承诺。但是,每当我尝试进行打字时 - Typescript 假定返回值已经被解析。

归结为:

async function getNumber(): Promise<number> {
  return 5;
}

async function getUnawaitedPromise(): Promise<number> {
  await fetch('...');

  return getNumber();
}

这不会引发任何打字稿错误。但是对于异步函数getUnawaitedPromise(),我希望返回类型为Promise&lt;Promise&lt;number&gt;&gt;

我认为这与此案类似:

function getNumber(): number {
  return 5;
}

async function mustReturnPromise(): Promise<number> {
  await fetch('...');

  return getNumber();
}

我希望返回结果是Promise&lt;ReturnTypeOfGetNumber&gt;

【问题讨论】:

    标签: typescript


    【解决方案1】:

    return await getNumberAsync();return getNumberAsync() 在 JavaScript 中会返回一个完全相同的东西,Promise&lt;number&gt;。不管有多少层,都不需要使用Promise&lt;Promise&lt;Promise&lt;type&gt;&gt;&gt;这样的嵌套。

    唯一真正重要的是在 try-catch 块中使用 return await

    否则不推荐return await,见eslint规则no-return-await

    【讨论】:

    • 感谢您的回复。我认为它不会返回相同的东西。原因是如果我在第一种情况下调用await mustReturnPromise(),我希望它能够解析异步函数,但仍然返回一个未解析的承诺。同样对于第二种情况,如果我调用await mustReturnPromise(),它会返回“无论getNumber() 函数的结果是什么。
    • “我希望它解决异步函数,但仍然返回一个未解决的承诺” - 我认为你不能。 Promise&lt;Promise&lt;T&gt;&gt; 只是 Promise&lt;T&gt;
    • 谢谢,现在我想起来完全有道理。
    猜你喜欢
    • 1970-01-01
    • 2019-03-20
    • 2017-12-07
    • 1970-01-01
    • 2019-07-20
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多