Generator

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

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 (bug 1083482).

Métodos legacy generator

Generator.prototype.next()
Retorna o valor fornecido pela expressão yield. Isto corresponde ao next() do ES6.
Generator.prototype.close()
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()
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()
Lança um erro no generator. Isto corresponde ao método throw() do ES6.

Exemplo do Legacy generator

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

Especificações Status Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Generator objects' in that specification.
Standard Definição Inicial
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Generator objects' in that specification.
Draft  

Compatibilidade nos navegadores

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 39.0 (Yes) Não suportado Não suportado Não suportado
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Não suportado 39.0 (Yes) Não suportado Não suportado Não suportado 39.0

Veja Também

Legacy generators

ES6 generators

Etiquetas do documento e colaboradores

 Colaboradores desta página: KennyMack
 Última atualização por: KennyMack,