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

View in English Always switch to English

AsyncGenerator : méthode next()

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨janvier 2020⁩.

La méthode next() des instances d'AsyncGenerator retourne la valeur suivante de la séquence.

Syntaxe

js
next()
next(value)

Paramètres

value Facultatif

Une valeur optionnelle utilisée pour modifier l'état interne du générateur. Une valeur passée à la méthode next() sera reçue par l'expression yield.

Valeur de retour

Une promesse (Promise) qui, une fois résolue, retourne un objet Object avec deux propriétés :

  • done
    • : Une valeur booléenne :
    • true si le générateur a dépassé la fin de son flux de contrôle. Dans ce cas, value définit la valeur de retour du générateur (qui peut être une valeur indéfinie).
      • false si le générateur peut encore produire des valeurs.
  • value
    • : Toute valeur JavaScript produite par l'expression de production (yield) ou retournée par le générateur.

Exemples

Utilisation de next()

L'exemple suivant montre un générateur et l'objet que la méthode next retourne :

js
// Une tâche asynchrone. Imaginez qu'elle fasse quelque chose
// de plus utile en pratique.
function valeurRetardee(temps, valeur) {
  return new Promise((resolution, rejet) => {
    setTimeout(() => resolution(valeur), temps);
  });
}

async function* creerGenerateurAsync() {
  yield valeurRetardee(500, 1);
  yield valeurRetardee(500, 2);
  yield valeurRetardee(500, 3);
}

const genAsync = creerGenerateurAsync();
genAsync.next().then((res) => console.log(res)); // { value: 1, done: false }
genAsync.next().then((res) => console.log(res)); // { value: 2, done: false }
genAsync.next().then((res) => console.log(res)); // { value: 3, done: false }
genAsync.next().then((res) => console.log(res)); // { value: undefined, done: true }

Envoyer des valeurs au générateur

Dans cet exemple, next est appelé avec une valeur.

Note : Le premier appel n'affiche rien, car le générateur n'avait pas encore produit de valeur.

js
// Une tâche asynchrone. Imaginez qu'elle fasse quelque chose
// de plus utile en pratique.
function attendre(temps) {
  return new Promise((resolution, rejet) => {
    setTimeout(resolution, temps);
  });
}

async function* creerGenerateurAsync() {
  while (true) {
    await attendre(500);
    const valeur = yield;
    console.log(valeur);
  }
}

async function principal() {
  const genAsync = creerGenerateurAsync();
  // Pas de sortie à cette étape : la première valeur envoyée via `next` est perdue
  console.log(await genAsync.next(1)); // { value: undefined, done: false }
  // Affiche 2 : la valeur envoyée via `next`
  console.log(await genAsync.next(2)); // { value: undefined, done: false }
}

principal();

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-asyncgenerator-prototype-next

Compatibilité des navigateurs

Voir aussi