Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Experiment: Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.

async function*

BaselineWidely available

Die Deklarationasync function* erstellt eineBindung einer neuen asynchronen Generatorfunktion zu einem gegebenen Namen.

Sie können asynchrone Generatorfunktionen auch mit demasync function* Ausdruck definieren.

Probieren Sie es aus

async function* foo() {  yield await Promise.resolve("a");  yield await Promise.resolve("b");  yield await Promise.resolve("c");}let str = "";async function generate() {  for await (const val of foo()) {    str += val;  }  console.log(str);}generate();// Expected output: "abc"

Syntax

js
async function* name(param0) {  statements}async function* name(param0, param1) {  statements}async function* name(param0, param1, /* …, */ paramN) {  statements}

Hinweis:Asynchrone Generatorfunktionen haben keine Gegenstücke in Pfeilfunktionen.

Hinweis:function und* sind separate Tokens, daher können sie durchLeerzeichen oder Zeilentrenner getrennt werden. Es darf jedoch kein Zeilentrenner zwischenasync undfunction stehen, da ansonsten ein Semikolonautomatisch eingefügt wird, wodurchasync zu einem Bezeichner wird und der Rest zu einerfunction* Deklaration.

Parameter

name

Der Funktionsname.

paramOptional

Der Name eines formalen Parameters für die Funktion. Informationen zur Syntax der Parameter finden Sie imFunktionsleitfaden.

statementsOptional

Die Anweisungen, die den Körper der Funktion bilden.

Beschreibung

Eineasync function* Deklaration erstellt einAsyncGeneratorFunction Objekt. Jedes Mal, wenn eine asynchrone Generatorfunktion aufgerufen wird, gibt sie ein neuesAsyncGenerator Objekt zurück, das demasynchronen Iterator-Protokoll entspricht. Jeder Aufruf vonnext() gibt einPromise zurück, das sich auf das Iterator-Ergebnisobjekt auflöst.

Eine asynchrone Generatorfunktion kombiniert die Merkmale vonasynchronen Funktionen undGeneratorfunktionen. Sie können sowohl die Schlüsselwörterawait als auchyield innerhalb des Funktionskörpers verwenden. Dies ermöglicht es Ihnen, asynchrone Aufgaben auf ergonomische Weise mitawait zu bearbeiten, während Sie die träge Natur von Generatorfunktionen nutzen.

Wenn ein Promise aus einem asynchronen Generator übergeben wird, wird der endgültige Zustand des Iterator-Ergebnis-Promises dem des übergebenen Promises entsprechen. Zum Beispiel:

js
async function* foo() {  yield Promise.reject(new Error("failed"));}foo()  .next()  .catch((e) => console.error(e));

Error: failed wird protokolliert, da wenn das übergebene Promise abgelehnt wird, das Iterator-Ergebnis ebenfalls abgelehnt wird. Dievalue-Eigenschaft des aufgelösten Ergebnisses eines asynchronen Generators wird kein weiteres Promise sein.

async function* Deklarationen verhalten sich ähnlich wiefunction Deklarationen — sie werdengehoisted an den Anfang ihres Bereichs und können überall in ihrem Bereich aufgerufen werden, und sie können nur in bestimmten Kontexten erneut deklariert werden.

Beispiele

Deklarieren einer asynchronen Generatorfunktion

Asynchrone Generatorfunktionen erzeugen immer Promises von Ergebnissen — sogar wenn jederyield Schritt synchron ist.

js
async function* myGenerator(step) {  await new Promise((resolve) => setTimeout(resolve, 10));  yield 0;  yield step;  yield step * 2;}const gen = myGenerator(2);gen  .next()  .then((res) => {    console.log(res); // { value: 0, done: false }    return gen.next();  })  .then((res) => {    console.log(res); // { value: 2, done: false }    return gen.next();  })  .then((res) => {    console.log(res); // { value: 4, done: false }    return gen.next();  })  .then((res) => {    console.log(res); // { value: undefined, done: true }    return gen.next();  });

Verwenden einer asynchronen Generatorfunktion zum Lesen einer Reihe von Dateien

In diesem Beispiel lesen wir eine Reihe von Dateien und greifen nur auf deren Inhalt zu, wenn dies angefordert wird, mit Hilfe des Nodefs/promises Moduls.

js
async function* readFiles(directory) {  const files = await fs.readdir(directory);  for (const file of files) {    const stats = await fs.stat(file);    if (stats.isFile()) {      yield {        name: file,        content: await fs.readFile(file, "utf8"),      };    }  }}const files = readFiles(".");console.log((await files.next()).value);// Possible output: { name: 'file1.txt', content: '...' }console.log((await files.next()).value);// Possible output: { name: 'file2.txt', content: '...' }

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-async-generator-function-definitions

Browser-Kompatibilität

Siehe auch

MDN-Feedback-Box

Diese Seite wurde automatisch aus dem Englischen übersetzt.


[8]ページ先頭

©2009-2025 Movatter.jp