Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez également contribuer en rejoignant la communauté francophone sur MDN Web Docs.

async function*

BaselineWidely available

Une déclarationasync function* définitune fonction génératrice asynchrone, qui renvoie un objetAsyncGenerator.

Exemple interactif

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 = str + val;  }  console.log(str);}generate();// Expected output: "abc"

Il est aussi possible de définir des fonctions génératrices asynchrones à l'aide du constructeurAsyncGeneratorFunction() oud'une expressionasync function*.

Syntaxe

js
async function* nom(param0) {  instructions;}async function* nom(param0, param1) {  instructions;}async function* nom(param0, param1, /* … ,*/ paramN) {  instructions;}

Note :Il n'existe pas de notation équivalente aux fonctions fléchées pour les fonctions génératrices asynchrones.

Paramètres

nom

Le nom de la fonction.

paramFacultatif

Le nom d'un paramètre formel pour la fonction.

instructionsFacultatif

Les instructions formant le corps de la fonction.

Description

Une fonction génératrice asynchrone combine les fonctionnalités desfonctions asynchrones et desfonctions génératrices. Les deux mots-clésawait etyield peuvent être utilisés dans le corps d'une telle fonction. Cela permet de gérer des tâches asynchrones de façon concise avecawait, tout en profitant de l'exécution à la demande permise par les fonctions génératrices.

À la différence des fonctions génératrices normales déclarées avecfunction*, une fonction génératrice asynchrone renvoie un objetAsyncGenerator qui suitle protocole itérable asynchrone. Chaque appel ànext() renvoieune promesse qui est résolue avec l'objet résultant de l'itérateur.

Lorsqu'une promesse est déclenchée depuis un générateur asynchrone, l'état de la promesse qui est le résultat de l'itérateur correspondra à celui de la promesse déclenchée. On aura par exemple :

js
async function* toto() {  yield Promise.reject(1);}toto()  .next()  .catch((e) => console.error(e));

Qui affichera1 dans la console, car la promesse ainsi générée déclenche une erreur et le résultat dans l'itérateur déclenche une erreur également. La propriétévalue du résultat d'un générateur asynchrone résolu ne sera pas une autre promesse.

Exemples

Déclarer une fonction génératrice asynchrone

Les fonctions génératrices asynchrones produisent toujours des promesses comme résultat, même si chaque étapeyield est synchrone.

js
async function* monGenerateur(etape) {  await new Promise((resolve) => setTimeout(resolve, 10));  yield 0;  yield etape;  yield etape * 2;}const gen = monGenerateur(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();  });

Utiliser une fonction génératrice asynchrone afin de lire un ensemble de fichiers

Dans cet exemple, on lit une suite de fichiers en accédant à leur contenu uniquement lorsqu'on le demande, en utilisant le module Node.jsfs/promises.

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);// Exemple de sortie : { name: 'fichier1.txt', content: '...' }console.log((await files.next()).value);// Exemple de sortie : { name: 'fichier2.txt', content: '...' }

Spécifications

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

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp