Suche…
Einführung
Eine async
Funktion gibt ein Versprechen zurück. await
Renditen für den Anrufer, bis das Versprechen einlöst und dann mit dem Ergebnis fortfährt.
Mit einem Iterator kann die Sammlung mit einer for-of
Schleife durchlaufen werden.
Ein asynchroner Iterator ist eine Sammlung, in der jede Iteration ein Versprechen ist, auf das mit einer for-await-of
Schleife gewartet werden kann.
Asynchrone Iteratoren sind ein Vorschlag der Stufe 3 . Sie sind in Chrome Canary 60 mit --harmony-async-iteration
Syntax
- async-Funktion * asyncGenerator () {}
- Ausbeute erwarten asyncOperationWhichReturnsAPromise ();
- for waitit (Ergebnis von asyncGenerator ()) {/ * Ergebnis ist der aufgelöste Wert aus dem Versprechen
Bemerkungen
Ein Asynchron - Iterator ist ein deklarativer Pull - Stream zu einem beobachtbaren der deklarativen Push - Strom gegenüber .
Nützliche Links
Grundlagen
Ein JavaScript- Iterator
ist ein Objekt mit einer .next()
-Methode, die ein IteratorItem
Objekt zurückgibt, bei dem es sich um ein Objekt mit dem value : <any>
und done : <boolean>
.
Ein JavaScript- AsyncIterator
ist ein Objekt mit einer .next()
-Methode, die ein Promise<IteratorItem>
zurückgibt, ein Versprechen für den nächsten Wert.
Um einen AsyncIterator zu erstellen, können wir die Async-Generatorsyntax verwenden :
/**
* Returns a promise which resolves after time had passed.
*/
const delay = time => new Promise(resolve => setTimeout(resolve, time));
async function* delayedRange(max) {
for (let i = 0; i < max; i++) {
await delay(1000);
yield i;
}
}
Die delayedRange
Funktion nimmt eine maximale Anzahl und gibt einen AsyncIterator
, der in Intervallen von 1 Sekunde Zahlen von 0 bis zu dieser Anzahl liefert.
Verwendungszweck:
for await (let number of delayedRange(10)) {
console.log(number);
}
Die for await of
Schleife ist eine weitere neue Syntax, die nur in async-Funktionen sowie in async-Generatoren verfügbar ist. Innerhalb der Schleife werden die ermittelten Werte (die, wie Sie sich erinnern können, Versprechungen sind) ausgepackt, sodass das Versprechen versteckt wird. Innerhalb der Schleife können Sie mit den direkten Werten (den errechneten Zahlen) umgehen, die for await of
warten, bis die Versprechen in Ihrem Namen vorliegen.
Das oben gezeigte Beispiel 1 Sekunde warten, 0 einzuloggen, eine Sekunde warten, log 1, und so weiter, bis es 9. Auf den Protokolle weisen die AsyncIterator
wird done
, und die for await of
Schleife verlassen wird.