在写JavaScript时代码中使用了await关键字然后报错是如下:

Error in global call to async function: "await is only valid in async functions and the top level bodies of modules"?

我们是知道的在JavaScript的新版中引入了异步的概念,即使我在function 中使用 await还是同样会报错如下:

async function getData(){
	await ......
}

这种用法是不被支持的,如果你想要使用javascript的异步首先你得了解它的模块概念,即module 。它是一种JavaScript 程序拆分为可按需导入的单独模块的机制,此时才有异步概念。要使用 async 和 await 请在模块中使用。就是说你应该把代码放到模块中(文件)中,然后引入进来,像下面这样:

<script type="module" src="script.js"></script>

 

常见触发场景与解决方案

await 必须出现在 async 函数体内,或在支持顶层 await 的 ES 模块中使用。遇到该报错时按代码位置对号入座即可。

  • script 标签内直接写 await:把标签改为 type="module" 即可支持顶层 await;
  • 普通函数里用 await:给该函数声明加 async 关键字;
  • 回调函数里用 await:把回调也改成 async 形式;
  • 旧版 Node 脚本(CommonJS):不支持顶层 await,需包一层 async 函数再调用;
  • 注意 async 函数返回的是 Promise,调用处若同步使用返回值需要再套 await。

相关阅读

参考资料