所以我现在遇到了几次,我一直只是忽略它。
在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.
答案 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());