L'objet Generator est renvoyé par une fonction génératrice, c'est à la fois un itérateur et un itérable.

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); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

Générateurs historiques

Firefox (SpiderMonkey) implémente également une version antérieure pour les générateurs avec JavaScript 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 1083482), il est fortement déconseillé de les utiliser.

Méthodes pour les générateurs historiques

Generator.prototype.next()
Renvoie une valeur générée par l'expression yield. Cette méthode correspond à next() pour les générateurs ES2015.
Generator.prototype.close()
Clôture le générateur, tout appel ultérieur à next() renverra une exception StopIteration. Cela correspond à la méthode return() pour les générateurs ES2015.
Generator.prototype.send()
Utilisée pour envoyer une valeur à un générateur. La valeur est renvoyée avec une expression yield et renvoie une valeur générée par la prochaine expression yield. send(x) correspond à next(x) pour les générateurs ES2015.
Generator.prototype.throw()
Lè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());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (le générateur est clôturé)

Spécifications

Spécification État Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'Generator objects' dans cette spécification.
Standard Définition initiale.
ECMAScript Latest Draft (ECMA-262)
La définition de 'Generator objects' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simpleChrome Support complet 39Edge Support complet 13Firefox Support complet 26IE Aucun support NonOpera Support complet OuiSafari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet 13Firefox Android Support complet 26Opera Android Support complet OuiSafari iOS Support complet 10Samsung Internet Android Support complet Ouinodejs Support complet 4.0.0
Support complet 4.0.0
Support complet 0.12
Désactivée
Désactivée From version 0.12: this feature is behind the --harmony runtime flag.
nextChrome Support complet 39Edge Support complet 13Firefox Support complet 26IE Aucun support NonOpera Support complet OuiSafari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet 13Firefox Android Support complet 26Opera Android Support complet OuiSafari iOS Support complet 10Samsung Internet Android Support complet Ouinodejs Support complet Oui
returnChrome Support complet 50Edge Support complet 13Firefox Support complet 38IE Aucun support NonOpera Support complet 37Safari Support complet 10WebView Android ? Chrome Android Support complet 50Edge Mobile Support complet 13Firefox Android Support complet 38Opera Android Support complet OuiSafari iOS Support complet 10Samsung Internet Android Support complet 5.0nodejs Support complet 6.0.0
throwChrome Support complet 39Edge Support complet 13Firefox Support complet 26IE Aucun support NonOpera Support complet OuiSafari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet 13Firefox Android Support complet 26Opera Android Support complet OuiSafari iOS Support complet 10Samsung Internet Android Support complet Ouinodejs Support complet 4.0.0
Support complet 4.0.0
Support complet 0.12
Désactivée
Désactivée From version 0.12: this feature is behind the --harmony runtime flag.

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.

Voir aussi

Générateurs historiques

Générateurs ES2015

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, Javascipt
Dernière mise à jour par : SphinxKnight,