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 protocol als auch dem async iterator protocol.
Async-Generator-Methoden geben immer Promise
-Objekte zurück.
AsyncGenerator
ist eine Unterklasse der versteckten AsyncIterator
-Klasse.
Konstruktor
Es gibt keine JavaScript-Entität, die dem AsyncGenerator
-Konstruktor entspricht. Instanzen von AsyncGenerator
müssen von async generator functions zurückgegeben werden:
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 durch async generator functions erstellt werden. Dieses Objekt wird oft als AsyncGenerator.prototype
stilisiert, um wie eine Klasse auszusehen, sollte aber passenderweise AsyncGeneratorFunction.prototype.prototype
genannt werden, da AsyncGeneratorFunction
eine tatsächliche JavaScript-Entität ist. Um die Prototypenkette von AsyncGenerator
-Instanzen zu verstehen, siehe AsyncGeneratorFunction.prototype.prototype
.
Instanzeigenschaften
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 anfängliche WertAsyncGeneratorFunction.prototype
.Hinweis:
AsyncGenerator
-Objekte speichern keine Referenz zur async generator function, die sie erstellt hat. AsyncGenerator.prototype[Symbol.toStringTag]
-
Der anfängliche Wert der
[Symbol.toStringTag]
-Eigenschaft ist der String"AsyncGenerator"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Instanzmethoden
Erbt auch Instanzmethoden von seinem Elternteil AsyncIterator
.
AsyncGenerator.prototype.next()
-
Gibt ein
Promise
zurück, das mit dem gegebenen Wert aufgelöst wird, der durch denyield
-Ausdruck geliefert wurde. AsyncGenerator.prototype.return()
-
Fungiert, als ob eine
return
-Anweisung im Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, was den Generator beendet und es dem Generator ermöglicht, alle Aufräumarbeiten durchzuführen, wenn er mit einemtry...finally
-Block kombiniert wird. AsyncGenerator.prototype.throw()
-
Fungiert, als ob eine
throw
-Anweisung im Körper des Generators an der aktuellen angehaltenen Position eingefügt wird, was den Generator über eine Fehlerbedingung informiert und es ihm ermöglicht, den Fehler zu behandeln oder Aufräumarbeiten durchzuführen und sich selbst zu schließen.
Beispiele
Async-Generator-Iteration
Das folgende Beispiel iteriert über einen async generator und protokolliert die Werte 1–6 in abnehmenden Zeitintervallen in die Konsole. Beachten Sie, wie jedes Mal ein Promise geliefert wird, das jedoch innerhalb der for await...of
-Schleife automatisch aufgelöst wird.
// 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® 2025 Language Specification # sec-asyncgenerator-objects |