SyntaxError: await ist nur in async Funktionen, async Generatoren und Modulen gültig

Die JavaScript-Ausnahme "await ist nur in async Funktionen, async Generatoren und Modulen gültig" tritt auf, wenn ein await-Ausdruck außerhalb von async Funktionen, Modulen oder anderen async-Kontexten verwendet wird.

Meldung

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)

Fehlertyp

Was ist schiefgelaufen?

Die JavaScript-Ausführung blockiert nie: Ein await kann die Ausführung des Programms nie blockieren. Stattdessen pausiert es die Ausführung der umgebenden async Aufgabe, während andere Aufgaben weiterlaufen können. Daher kann await nicht in synchronen Aufgaben verwendet werden, wie z.B. Funktionen, Generatorfunktionen oder dem obersten Level von Skripten. Es ist nicht immer offensichtlich, ob die aktuelle Datei ein Skript oder ein Modul ist — siehe den Module-Leitfaden für weitere Informationen.

Beispiele

Top-Level await

Sie können await nicht auf der obersten Ebene eines Skripts verwenden:

html
<script>
  await fetch("https://example.com");
  // SyntaxError: await is only valid in async functions, async generators and modules
</script>

Stattdessen machen Sie das Skript zu einem Modul:

html
<script type="module">
  await fetch("https://example.com");
</script>

Asynchrone Rückrufe

Sie können await nicht in einem synchronen Rückruf verwenden:

js
urls.forEach((url) => {
  await fetch(url);
  // SyntaxError: await is only valid in async functions, async generators and modules
});

Stattdessen machen Sie den Rückruf async. Weitere Erklärungen finden Sie im Leitfaden zur Nutzung von Promises.

js
Promise.all(
  urls.map(async (url) => {
    await fetch(url);
  }),
);

Siehe auch