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 .

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow