Generator

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

O objeto Generator é retornado por generator function e conforme iterable protocol e o iterator protocol.

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