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 durch eine asynchrone Generatorfunktion zurückgegeben und es entspricht sowohl dem asynchronen iterierbaren Protokoll als auch dem asynchronen Iterator-Protokoll.
Methoden von asynchronen Generatoren 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 asynchronen Generatorfunktionen 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 existiert nur ein verstecktes Objekt, das das Prototypenobjekt ist, das von allen Objekten geteilt wird, die durch asynchrone Generatorfunktionen erstellt wurden. Dieses Objekt wird oft als AsyncGenerator.prototype
stilisiert, um es wie eine Klasse aussehen zu lassen, aber es sollte treffender 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 AnfangswertAsyncGeneratorFunction.prototype
.Hinweis:>
AsyncGenerator
Objekte speichern keinen Verweis auf die asynchrone Generatorfunktion, die sie erstellt hat. AsyncGenerator.prototype[Symbol.toStringTag]
-
Der Anfangswert 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 dieyield
Anweisung zurückgegeben wird. AsyncGenerator.prototype.return()
-
Verhält sich so, als ob eine
return
Anweisung im Körper des Generators an der aktuellen, ausgesetzten Position eingefügt wird, was den Generator beendet und dem Generator erlaubt, alle Aufräumarbeiten durchzuführen, wenn er mit einemtry...finally
Block kombiniert wird. AsyncGenerator.prototype.throw()
-
Verhält sich so, als ob eine
throw
Anweisung im Körper des Generators an der aktuellen, ausgesetzten Position eingefügt wird, was dem Generator eine Fehlerbedingung anzeigt und es ihm erlaubt, den Fehler zu behandeln oder aufzuräumen und sich zu schließen.
Beispiele
Iteration über asynchrone Generatoren
Im folgenden Beispiel wird über einen asynchronen Generator iteriert, wobei die Werte 1–6 in abnehmenden Zeitintervallen in die Konsole protokolliert werden. Beachten Sie, wie jedes Mal ein Promise zurückgegeben wird, das jedoch automatisch innerhalb der for await...of
Schleife 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® 2026 Language Specification # sec-asyncgenerator-objects |