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() Non-standard

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

Generator.prototype.close() Non-standard

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() Non-standard

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() Non-standard

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® 2025 Language Specification
# sec-generator-objects

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Generator
next
return
throw

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Veja Também

Legacy generators

ES6 generators