从`async`函数返回`void`

时间:2020-03-19 16:53:39

标签: javascript typescript

所以我现在遇到了几次,我一直只是忽略它。

在TypeScript中,当我编写代码时:

async function someAsyncFunc(): void {
    const prom = await somePromise();
}

它向我抱怨,异步函数应始终具有以下返回类型:Promise<T>。所以它想要我的是:

async function someAsyncFunc(): Promise<void>

我知道,但是此方法不会返回任何内容。到此为止,我一直都只使用Promise<void>类型,但这会导致错误,因为TypeScript现在认为此函数返回了诺言,不是吗?

在编写此问题并进行测试时有一个想法。事实证明这是真的。看看我自己的答案,以防万一你想知道:)

错误消息,希望它会被Google索引:

The return type of an async function or method must be the global Promise<T> type.

3 个答案:

答案 0 :(得分:3)

异步功能被认为是Promise paradigm的扩展。

对于javascript /打字稿,知道特定的函数返回是异步的,这是因为它返回了Promise 。这意味着异步功能 返回类型始终 Promise 。然后,您可以将一个值包装到该承诺中,可以是 void number string ,另一个 promise ,等

来自MDN

异步功能是一种异步运行的功能 通过事件循环,使用隐式Promise返回其结果

更多:

异步函数可以包含一个await表达式,该表达式会暂停 执行异步功能并等待传递的Promise 解决,然后恢复异步函数的执行和 返回解析值。请记住,await关键字仅有效 内部异步函数。

恢复:函数中的aysnc / await是语法糖,可提高代码的可读性。

答案 1 :(得分:0)

异步函数将始终返回promise。您对问题的回答结果应打印Promise{<state>: "<finished>"}而不是无效。您需要等待异步功能才能看到void响应

async function test() {};
console.log(test());

成为

async function test() {};
console.log(await test());

答案 2 :(得分:-1)

在写这个问题时,我想到了解决方案。因此,现在我要自己回答这个问题,以防其他人想知道。

当您创建async function时,JavaScript会隐式返回一个Promise(然后将变为空)。就像您要编写普通的void函数一样,不必在末尾加上return;,它确实会返回。

async function test() {};
// Will return a resolved void promise
// the code snipped result only shows "{}" check it out in
// the browser console and you'll see
console.log(test());

相关问题