JavaScript 中意外的保留字“await”错误

JavaScript 中意外的保留字“await”错误

Unexpected reserved word ‘await’ error in JavaScript

当在await未标记为async. 要在await
函数内部使用关键字,请将直接封闭的函数标记为
async

意外的保留字等待

以下是错误发生方式的 2 个示例。

索引.js
function getString() { // 👈️ not marked async // ⛔️ unexpected reserved word 'await' const str = await Promise.resolve('hello'); return str; } // ⛔️ unexpected reserved word 'await' const result = await Promise.resolve(42); // 👈️ top-level await

我们没有将getString函数声明为async,因此我们无法在await其中使用关键字。相反,我们应该将函数标记为async.

索引.js
async function getString() { const str = await Promise.resolve('hello'); return str; }
错误的一个非常常见的原因是忘记将内部函数设置为异步,例如我们传递给 , 等方法的forEach()函数 map()

请记住,直接封闭的函数必须标记async
为您才能使用
await关键字。

索引.js
async function loopThrough() { ['a', 'b', 'c'].forEach(str => { // ⛔️ unexpected reserved word 'await' await Promise.resolve(str); }); }

loopThrough我们将函数标记为async,但是,我们在
await传递给forEach方法的函数内部使用关键字。

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

索引.js
function loopThrough() { ['a', 'b', 'c'].forEach(async str => { await Promise.resolve(str); }); }

我们将传递给forEach方法的函数声明为异步的,因此我们可以在await其中使用关键字。

必须标记直接封闭的函数,async以便我们能够使用await关键字。

如果您尝试在顶层使用 await 关键字,请确保在浏览器的标签中使用或设置该属性typemodule在您的package.json文件中
设置该属性。
node.jsscript

如果您在浏览器环境中,type请在您的脚本标记中将属性设置module为能够使用顶级await

索引.html
<script type="module" src="index.js"></script>

现在您可以在代码中使用顶级等待,例如

索引.js
console.log(await Promise.resolve(10));

await下面是如何在 Node.js中使用顶层。

package.json如果您还没有文件,请创建文件:

npm init -y

添加type属性并将其设置为module您的package.json文件。

包.json
{ "type": "module", "name": "javascript", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }

现在您可以在 Node.js 代码中使用顶层await

结论#

当在await未标记为async. 要在await
函数内部使用关键字,请将直接封闭的函数标记为
async