Generator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since setembro de 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()Não padrão-
Retorna o valor fornecido pela expressão
yield. Isto corresponde aonext()do ES6. Generator.prototype.close()Não padrão-
Fecha o generator, então quando chamar
next()um erroStopIterationserá lançado. Isto corresponde ao métodoreturn()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 nextyield.send(x)corresponde aonext(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
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> |