在写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。
相关阅读
- JavaScript 获取时间戳的几种方法对比与使用场景
- 完美的判断页面是否有滚动条|JS 判断思路与实现代码
- JS parseInt 的进制陷阱:默认解析规则与安全用法建议
- JavaScript 前一天 本月最后一天|日期计算常用写法