AsyncGenerator

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

Das AsyncGenerator-Objekt wird von einer async generator function zurückgegeben und entspricht sowohl dem async iterable Protokoll als auch dem async iterator Protokoll.

Async-Generator-Methoden liefern immer Promise-Objekte.

AsyncGenerator ist eine Unterklasse der verborgenen AsyncIterator-Klasse.

Probieren Sie es aus

Konstruktor

Es gibt keine JavaScript-Entität, die dem AsyncGenerator-Konstruktor entspricht. Instanzen von AsyncGenerator müssen von Async-Generator-Funktionen zurückgegeben werden:

js
async function* createAsyncGenerator() {
  yield Promise.resolve(1);
  yield await Promise.resolve(2);
  yield 3;
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res.value)); // 1
asyncGen.next().then((res) => console.log(res.value)); // 2
asyncGen.next().then((res) => console.log(res.value)); // 3

Es gibt nur ein verstecktes Objekt, das das Prototyp-Objekt ist, das von allen Objekten geteilt wird, die von Async-Generator-Funktionen erstellt wurden. Dieses Objekt wird oft als AsyncGenerator.prototype stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte angemessener als AsyncGeneratorFunction.prototype.prototype bezeichnet werden, da AsyncGeneratorFunction eine tatsächliche JavaScript-Entität ist. Um die Prototyp-Kette von AsyncGenerator-Instanzen zu verstehen, siehe AsyncGeneratorFunction.prototype.prototype.

Instanz-Eigenschaften

Diese Eigenschaften sind auf AsyncGenerator.prototype definiert und werden von allen AsyncGenerator-Instanzen geteilt.

AsyncGenerator.prototype.constructor

Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für AsyncGenerator-Instanzen ist der Anfangswert AsyncGeneratorFunction.prototype.

Hinweis: AsyncGenerator-Objekte speichern keinen Verweis auf die async Generatorfunktion, die sie erstellt hat.

AsyncGenerator.prototype[Symbol.toStringTag]

Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "AsyncGenerator". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Instanz-Methoden

Erbt auch Instanzmethoden von seinem übergeordneten AsyncIterator.

AsyncGenerator.prototype.next()

Gibt ein Promise zurück, das mit dem angegebenen Wert aufgelöst wird, der durch den yield-Ausdruck geliefert wird.

AsyncGenerator.prototype.return()

Wirkt so, als ob eine return-Anweisung an der aktuellen unterbrochenen Position im Körper des Generators eingefügt ist, was den Generator beendet und es dem Generator ermöglicht, Aufräumarbeiten auszuführen, wenn es mit einem try...finally-Block kombiniert wird.

AsyncGenerator.prototype.throw()

Wirkt so, als ob eine throw-Anweisung an der aktuellen unterbrochenen Position im Körper des Generators eingefügt ist, was den Generator über einen Fehlerzustand informiert und ihm ermöglicht, den Fehler zu behandeln oder Aufräumarbeiten durchzuführen und sich zu schließen.

Beispiele

Async-Generator-Iteration

Das folgende Beispiel iteriert über einen Async-Generator und protokolliert die Werte 1–6 in der Konsole in abnehmenden Zeitintervallen. Beachten Sie, dass jedes Mal ein Promise geliefert wird, aber es automatisch innerhalb der for await...of-Schleife aufgelöst wird.

js
// An async task. Pretend it's doing something more useful
// in practice.
function delayedValue(time, value) {
  return new Promise((resolve /*, reject*/) => {
    setTimeout(() => resolve(value), time);
  });
}

async function* generate() {
  yield delayedValue(2000, 1);
  yield delayedValue(1000, 2);
  yield delayedValue(500, 3);
  yield delayedValue(250, 4);
  yield delayedValue(125, 5);
  yield delayedValue(50, 6);
  console.log("All done!");
}

async function main() {
  for await (const value of generate()) {
    console.log("value", value);
  }
}

main().catch((e) => console.error(e));

Spezifikationen

Specification
ECMAScript Language Specification
# sec-asyncgenerator-objects

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch