‘await’ 表达式只允许在异步函数中使用
‘await’ expression is only allowed within an async function
当在await
未标记为
async
.
要解决错误并使用await
关键字,请将直接封闭的函数标记为async
。
下面是错误如何发生的示例。
索引.ts
function getNum() { // ⛔️ Error: 'await' expressions are only allowed within async functions and at the top levels of modules.ts(1308) const num = await Promise.resolve(42); return num; }
我们没有将getNum
函数声明为async
,因此我们无法
await
在其中使用关键字。
将直接封闭的函数标记为async
要解决该错误,请将直接封闭函数标记为async
。
索引.ts
// 👇️ mark as async async function getNum() { const num = await Promise.resolve(42); return num; }
忘记将回调函数标记为async
错误的一个非常常见的原因是忘记将内部函数设置为
async
,例如我们传递给方法的函数forEach
,例如map
, 等。
索引.ts
async function loopNumbers() { [1, 2, 3].forEach((num) => { // ⛔️ Error: 'await' expressions are only allowed within async functions and at the top levels of modules.ts(1308) await Promise.resolve(num); }); }
我们将loopNumbers
函数标记为,但我们
在传递给方法的函数内部async
使用了关键字。await
forEach()
相反,我们应该将传递给的函数标记forEach
为async
。
索引.ts
function loopNumbers() { // 👇️ inner function is async, // because it uses await [1, 2, 3].forEach(async (num) => { await Promise.resolve(num); }); }
我们将传递给forEach()
方法的函数声明为async
,现在我们可以await
在其中使用关键字。
必须标记直接封闭的函数,async
以便我们能够使用await
关键字。
我已经写了一篇关于
如何输入异步函数的详细指南。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: