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
方法的函数内部使用关键字。
相反,我们应该将传递给的函数标记forEach
为async
。
索引.js
function loopThrough() { ['a', 'b', 'c'].forEach(async str => { await Promise.resolve(str); }); }
我们将传递给forEach
方法的函数声明为异步的,因此我们可以在await
其中使用关键字。
必须标记直接封闭的函数,
async
以便我们能够使用await
关键字。如果您尝试在顶层使用 await 关键字,请确保在浏览器的标签中使用或设置该属性type
时module
在您的package.json
文件中
设置该属性。node.js
script
如果您在浏览器环境中,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
。