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
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 aonext()
do ES6. Generator.prototype.close()
Non-standard-
Fecha o generator, então quando chamar
next()
um erroStopIteration
será lançado. Isto corresponde ao métodoreturn()
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 nextyield
.send(x)
corresponde aonext(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
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 Language Specification # sec-generator-objects |
Compatibilidade com navegadores
BCD tables only load in the browser