Generator : 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 septembre 2016.
La méthode next() des instances de Generator retourne un objet avec deux propriétés done et value. Vous pouvez également fournir un paramètre à la méthode next pour envoyer une valeur au générateur.
Syntaxe
next()
next(value)
Paramètres
valueFacultatif-
La valeur à envoyer au générateur.
La valeur sera affectée comme résultat d'une expression
yield. Par exemple, dansvariable = yield expression, la valeur passée à la fonction.next()sera affectée àvariable.
Valeur de retour
Un Object possédant deux propriétés :
done-
Une valeur booléenne :
truesi le générateur a dépassé la fin de son flux de contrôle. Dans ce cas,valuedéfinit la valeur de retour du générateur (qui peut être indéfinie).falsesi le générateur peut produire d'autres valeurs.
value-
Toute valeur JavaScript produite ou retournée par le générateur.
Exceptions
TypeError-
Levée si le générateur est déjà en cours d'exécution.
Exemples
Utiliser la méthode next()
L'exemple suivant illustre comment utiliser un générateur simple et les objets renvoyés par la méthode next :
function* gen() {
yield 1;
yield 2;
yield 3;
}
var g = gen(); // "Generator { }"
g.next(); // "Object { value: 1, done: false }"
g.next(); // "Object { value: 2, done: false }"
g.next(); // "Object { value: 3, done: false }"
g.next(); // "Object { value: undefined, done: true }"
Utiliser la méthode next() avec une liste
Dans cet exemple, obtenirPage prend une liste et la « pagine » en segments de taille taillePage. Chaque appel à next produira un de ces segments.
function* obtenirPage(list, taillePage = 1) {
for (let index = 0; index < list.length; index += taillePage) {
yield list.slice(index, index + taillePage);
}
}
const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = obtenirPage(list, 3); // Generator { }
page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }
Envoyer des valeurs à un générateur
Dans cet exemple, next est appelé avec une valeur.
Note : Le premier appel n'affiche rien, car le générateur ne produisait rien initialement.
function* gen() {
while (true) {
const value = yield;
console.log(value);
}
}
const g = gen();
g.next(1); // Retourne { value: undefined, done: false }
// Aucun journal à cette étape : la première valeur envoyée via `next` est perdue
g.next(2); // Retourne { value: undefined, done: false }
// Journalise 2
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-generator.prototype.next |
Compatibilité des navigateurs
Voir aussi
- La délcaration
function* - Le guide des itérateurs et générateurs