Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Januar 2020 browserübergreifend verfügbar.
Die for await...of-Anweisung erstellt eine Schleife, die über asynchronen iterierbaren Objekten sowie synchronen Iterables iteriert. Diese Anweisung kann nur in Kontexten verwendet werden, in denen await verwendet werden kann, was den Körper einer asynchronen Funktion und ein Modul einschließt.
Empfängt bei jeder Iteration einen Wert aus der Sequenz. Kann entweder eine Deklaration mit const, let oder var sein oder ein Zuweisungsziel (z. B. eine zuvor deklarierte Variable, eine Objekteigenschaft oder ein Destrukturierungsmuster). Variablen, die mit var deklariert wurden, sind nicht lokal für die Schleife, d.h. sie befinden sich im gleichen Gültigkeitsbereich wie die for await...of-Schleife.
iterableEin asynchrones oder synchrones Iterable. Die Quelle der Wertsequenz, über die die Schleife operiert.
statementEine Anweisung, die bei jeder Iteration ausgeführt wird. Kann auf variable verweisen. Sie können eine Block-Anweisung verwenden, um mehrere Anweisungen auszuführen.
Wenn eine for await...of-Schleife über ein Iterable iteriert, ruft sie zuerst die [Symbol.asyncIterator]()-Methode des Iterables auf und ruft diese auf, die einen asynchronen Iterator zurückgibt. Wenn die @asyncIterator-Methode nicht existiert, sucht sie nach einer [Symbol.iterator]()-Methode, die einen synchronen Iterator zurückgibt. Der zurückgegebene synchrone Iterator wird dann in einen asynchronen Iterator umgewandelt, indem jedes von den next(), return() und throw()-Methoden zurückgegebene Objekt in ein erfülltes oder abgelehntes Promise gewickelt wird, wobei die value-Eigenschaft aufgelöst wird, wenn sie ebenfalls ein Promise ist. Die Schleife ruft dann wiederholt die next()-Methode des endgültigen asynchronen Iterators auf und wartet das zurückgegebene Promise ab, um die Wertesequenz zu erzeugen, die variable zugewiesen wird.
Eine for await...of-Schleife wird beendet, wenn der Iterator abgeschlossen ist (das erwartete next()-Ergebnis ist ein Objekt mit done: true). Wie bei anderen Schleifenanweisungen können Sie Kontrollflussanweisungen innerhalb der statement verwenden:
Wenn die for await...of-Schleife vorzeitig beendet wurde (z. B. wenn eine break-Anweisung auftritt oder ein Fehler auftritt), wird die return()-Methode des Iterators aufgerufen, um Aufräumarbeiten durchzuführen. Das zurückgegebene Promise wird erwartet, bevor die Schleife beendet wird.
for await...of funktioniert im Allgemeinen wie die for...of-Schleife und teilt viele der gleichen Syntax und Semantik. Es gibt ein paar Unterschiede:
Wie for...of, wenn Sie eine using-Deklaration verwenden, darf die Variable nicht of genannt werden:
Dies ist, um Syntax-Mehrdeutigkeiten mit dem gültigen Code for await (using of []) zu vermeiden, bevor using eingeführt wurde.
Sie können auch über ein Objekt iterieren, das das asynchrone iterierbare Protokoll explizit implementiert:
Da die Rückgabewerte von asynchronen Generatorfunktionen dem asynchronen iterierbaren Protokoll entsprechen, können sie mit for await...of durchlaufen werden.
Für ein konkreteres Beispiel des Iterierens über einen asynchronen Generator mithilfe von for await...of betrachten Sie das Iterieren über Daten von einer API.
Dieses Beispiel erstellt zunächst ein asynchrones Iterable für einen Datenstrom und verwendet es dann, um die Größe der Antwort von der API zu ermitteln.
Die for await...of-Schleife konsumiert auch synchrone Iterables und Generatoren. In diesem Fall wartet sie intern die ausgegebenen Werte ab, bevor sie sie der Schleifensteuerungsvariablen zuweist.
Hinweis: Beachten Sie, dass abgelehnte Promises von einem synchronen Generator erzeugt werden. In einem solchen Fall wirft for await...of einen Fehler beim Konsumieren des abgelehnten Promise und ruft NICHT die finally-Blöcke innerhalb dieses Generators auf. Dies kann unerwünscht sein, wenn Sie einige zugewiesene Ressourcen mit try/finally freigeben müssen.
Um sicherzustellen, dass die finally-Blöcke eines synchronen Generators immer aufgerufen werden, verwenden Sie die geeignete Form der Schleife — for await...of für den asynchronen Generator und for...of für den synchronen — und warten Sie explizit ab, dass Promises innerhalb der Schleife ausgegeben werden.
| ECMAScript® 2027 Language Specification # sec-for-in-and-for-of-statements |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.