Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Generator
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.
L'objetGenerator est renvoyé par unefonction génératrice, c'est à la foisun itérateur etun itérable.
Dans cet article
Syntaxe
function* gen() { yield 1; yield 2; yield 3;}var g = gen(); // "Generator { }"Méthodes
Generator.prototype.next()Renvoie une valeur générée par l'expression
yield.Generator.prototype.return()Renvoie la valeur donnée et termine le générateur.
Generator.prototype.throw()Lève une exception dans un générateur. Cette opération termine le générateur, sauf si l'exception est interceptée dans le générateur.
Exemple
>Un itérateur infini
function* idMaker() { var index = 0; while (true) yield index++;}var gen = idMaker(); // "Generator { }"console.log(gen.next().value); // 0console.log(gen.next().value); // 1console.log(gen.next().value); // 2// ...Générateurs historiques
Firefox (SpiderMonkey) implémente également une version antérieure pour les générateurs avecJavaScript 1.7. Pour cette syntaxe, il n'y a pas besoin d'utiliser l'astérisque dans la déclaration de la fonction, il suffit d'utiliser le mot-cléyield dans le corps de la fonction. Les générateurs historiques sont une fonctionnalité dépréciée et seront supprimés à l'avenir (bug Firefox 1083482), il est fortement déconseillé de les utiliser.
Méthodes pour les générateurs historiques
Generator.prototype.next()Non standardRenvoie une valeur générée par l'expression
yield. Cette méthode correspond ànext()pour les générateurs ES2015.Generator.prototype.close()Non standardClôture le générateur, tout appel ultérieur à
next()renverra une exceptionStopIteration. Cela correspond à la méthodereturn()pour les générateurs ES2015.Generator.prototype.send()Non standardUtilisée pour envoyer une valeur à un générateur. La valeur est renvoyée avec une expression
yieldet renvoie une valeur générée par la prochaine expressionyield.send(x)correspond ànext(x)pour les générateurs ES2015.Generator.prototype.throw()Non standardLève une exception au sein d'un générateur. Cela correspond à la méthode
throw()pour les générateurs ES2015.
Exemple utilisant un générateur historique
function* fibonacci() { var a = yield 1; yield a * 2;}var it = fibonacci();console.log(it); // "Generator { }"console.log(it.next()); // 1console.log(it.send(10)); // 20console.log(it.close()); // undefinedconsole.log(it.next()); // throws StopIteration (le générateur est clôturé)Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator-objects> |
Compatibilité des navigateurs
Voir aussi
>Générateurs historiques
Générateurs ES2015
- Fonctions
function- L'expression
function Functionfunction*- L'expression
function* GeneratorFunction- Le protocole Iterator