Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Seit January 2024 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.
Die Array.fromAsync() statische Methode erstellt eine neue, flach kopierte Array-Instanz aus einem asynchronen iterierbaren, iterierbaren oder array-ähnlichen Objekt.
Ein asynchrones iterierbares, iterierbares oder array-ähnliches Objekt, das in ein Array konvertiert werden soll.
mapFn OptionalEine Funktion, die für jedes Element des Arrays aufgerufen wird. Wenn bereitgestellt, wird jeder Wert, der dem Array hinzugefügt werden soll, zuerst durch diese Funktion geleitet, und der Rückgabewert von mapFn wird stattdessen dem Array hinzugefügt (nachdem er abgewartet wurde). Die Funktion wird mit den folgenden Argumenten aufgerufen:
elementDas aktuelle Element, das im Array verarbeitet wird. Wenn items ein synchrones iterierbares oder array-ähnliches Objekt ist, werden alle Elemente zuerst abgewartet, und element wird niemals ein thenable sein. Wenn items ein asynchrones iterierbares Objekt ist, wird jeder erzeugte Wert unverändert übergeben.
indexDer Index des aktuellen Elements, das im Array verarbeitet wird.
thisArg OptionalWert, der als this beim Ausführen von mapFn verwendet wird.
Ein neues Promise, dessen Erfüllungswert eine neue Array-Instanz ist.
Array.fromAsync() ermöglicht das Erstellen von Arrays aus:
Array.fromAsync() durchläuft das asynchrone Iterierbare auf eine Weise, die sehr ähnlich zu for await...of ist. Array.fromAsync(items) ist im Allgemeinen äquivalent zu folgendem Code, wenn items ein asynchrones oder synchrones Iterierbares ist:
Array.fromAsync() ist in Bezug auf das Verhalten fast gleichwertig zu Array.from(), außer in folgenden Punkten:
Array.fromAsync() und Promise.all() können beide ein iterierbares Objekt von Versprechen in ein Versprechen eines Arrays umwandeln. Es gibt jedoch zwei Hauptunterschiede:
Wenn items ein asynchrones Iterierbares ist, bei dem jeder value ebenfalls ein Promise ist, werden diese Promises dem resultierenden Array ohne Warten hinzugefügt. Dies steht im Einklang mit dem Verhalten von for await...of.
Hinweis: In der Praxis werden Sie selten ein asynchrones Iterierbares antreffen, das Promises erzeugt, da wenn Sie es mit einer asynchronen Generatorfunktion implementieren, dann der yield-Ausdruck automatisch Promises entpackt.
Wenn items ein synchrones Iterierbares oder array-ähnliches Objekt ist, werden sowohl die Eingabe als auch die Ausgabe von mapFn intern durch Array.fromAsync() abgewartet.
Wenn items ein asynchrones Iterierbares ist, wird die Eingabe an mapFn nicht abgewartet, aber die Ausgabe schon. Unter Verwendung der gleichen createAsyncIter Funktion von oben:
Interessanterweise bedeutet dies, dass Array.fromAsync(createAsyncIter()) nicht gleichwertig ist mit Array.fromAsync(createAsyncIter(), (element) => element), da letztere jeden erzeugten Wert abwartet, während ersteres dies nicht tut.
Array.fromAsync() wartet jeden Wert ab, der aus dem Objekt sequentiell erzeugt wird. Promise.all() wartet alle Werte gleichzeitig ab.
Ähnlich wie for await...of, wenn das Objekt, das durchlaufen wird, ein synchrones Iterierbares ist und ein Fehler beim Durchlaufen geworfen wird, wird die return() Methode des zugrunde liegenden Iterators nicht aufgerufen, sodass der Iterator nicht geschlossen wird.
Wenn Sie den Iterator schließen müssen, müssen Sie eine for...of Schleife verwenden und jeden Wert selbst abwarten.
| ECMAScript® 2027 Language Specification # sec-array.fromasync |
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.