Generator - JavaScript | MDN

Síntaxe

function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"

Métodos

Generator.prototype.next()

Retorna o valor fornecido pela expressão yield.

Generator.prototype.return()

Retorna o valor fornecido a finaliza o generator.

Generator.prototype.throw()

Lança um erro no generator.

Example

An infinite iterator

js

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
// ...

Objeto legacy generator

Firefox (SpiderMonkey) também implementa a versão anterior do generator em JavaScript 1.7, onde o asterisco (*) na declaração da função não era necessário (somente era necessário usar a palavra reservada yield no corpo da função). Contudo, legacy generators estão obsoletos. Não os use, eles serão removidos (Erro do Firefox 1083482).

Métodos legacy generator

Generator.prototype.next() Não padrão

Retorna o valor fornecido pela expressão yield. Isto corresponde ao next() do ES6.

Generator.prototype.close() Não padrão

Fecha o generator, então quando chamar next() um erro StopIteration será lançado. Isto corresponde ao método return() do ES6.

Generator.prototype.send() Não padrão

Usado para enviar um valor para o generator. Este valor é retordo pela expressão yield, e retorna o valor fornecido pelo pelo next yield. send(x) corresponde ao next(x) do ES6.

Generator.prototype.throw() Não padrão

Lança um erro no generator. Isto corresponde ao método throw() do ES6.

Exemplo do Legacy generator

js

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 (Como o generator está fechado)

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-generator-objects

Compatibilidade com navegadores

Veja Também

Legacy generators

ES6 generators

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.