SyntaxError: await действителен только в асинхронных функциях, асинхронных генераторах и модулях
Исключение JavaScript "await is only valid in async functions, async generators and modules" возникает, когда выражение 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 на верхнем уровне скрипта:
<script>
await fetch("https://example.com");
// SyntaxError: await is only valid in async functions, async generators and modules
</script>
Вместо этого сделайте скрипт модулем:
<script type="module">
await fetch("https://example.com");
</script>
Асинхронные колбэки
Вы не можете использовать await в синхронном колбэке:
urls.forEach((url) => {
await fetch(url);
// SyntaxError: await is only valid in async functions, async generators and modules
});
Вместо этого сделайте колбэк асинхронным. Более подробное объяснение см. в руководстве по использованию промисов.
Promise.all(
urls.map(async (url) => {
await fetch(url);
}),
);
Смотрите также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Bad_await