SyntaxError: await 只能在异步函数、异步生成器和模块中使用
消息
SyntaxError: await is only valid in async functions and the top level bodies of modules (V8-based) SyntaxError: await is only valid in async functions, async generators and modules (Firefox) SyntaxError: Unexpected identifier (Safari)
错误类型
哪里出错了?
JavaScript 执行永远不会阻塞:await
永远不会阻塞程序的执行。相反,它会暂停周围异步任务的执行,同时允许其他任务继续运行。因此,await
不能用于同步任务,例如函数、生成器函数或脚本的顶层。当前文件是脚本还是模块并不总是很明显——有关更多信息,请参阅 模块指南。
示例
顶层 await
您不能在脚本的顶层使用 await
html
<script>
await fetch("https://example.com");
// SyntaxError: await is only valid in async functions, async generators and modules
</script>
相反,请将脚本设为模块
html
<script type="module">
await fetch("https://example.com");
</script>
异步回调
您不能在同步回调中使用 await
js
urls.forEach((url) => {
await fetch(url);
// SyntaxError: await is only valid in async functions, async generators and modules
});
相反,请将回调设为异步。在 使用 Promise 指南 中可以找到更多解释。
js
Promise.all(
urls.map(async (url) => {
await fetch(url);
}),
);