‘await’ 表达式只允许在异步函数中使用

‘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使用了关键字awaitforEach()

相反,我们应该将传递给的函数标记forEachasync

索引.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关键字。

我已经写了一篇关于
如何输入异步函数的详细指南。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: