NodeJS脚本中async函数无法正常运行的问题求助
问题解答:Node 10.3.0中
await报错的原因及解决办法 嘿,别担心,这绝对是Node.js新手常会碰到的坑!我来帮你理清楚问题所在:
为什么浏览器能运行,Node 10.3.0不行?
现代浏览器的ES模块环境(比如用<script type="module">引入代码时)已经支持顶层await——也就是在全局/顶层作用域直接使用await关键字。但Node.js 10.3.0的版本还不支持这个特性:当时顶层await还处于TC39提案阶段,直到Node.js v14.8.0才默认启用该特性,更早的版本(比如v13.x)也需要通过实验性标志才能开启,而v10.3.0完全没有这个支持。
你的代码里const test = await testAsync();这一行是直接写在顶层作用域的,没有包裹在任何async函数内部,这就触发了Node 10.3.0的语法错误。
解决办法
最稳妥且兼容Node 10.3.0的方案,是把顶层的await调用放到一个async函数里执行:
async function testAsync() { return await new Promise(function(resolve) { setTimeout(function() { resolve('Hello World!'); }, 1000); }); } // 新增一个async函数来包裹await调用 async function run() { const test = await testAsync(); console.log(test); } // 执行这个函数 run();
如果你之后升级到Node.js v14.8.0或更高版本,就可以直接使用顶层await了(需要确保你的脚本是ES模块,比如把文件后缀改成.mjs,或者在package.json里设置"type": "module")。
内容的提问来源于stack exchange,提问作者jBoive
相关产品推荐
相关产品推荐

