Generator
The Generator
object is returned by a generator function and it conforms to both the iterable protocol and the iterator protocol.
Constructor
This object cannot be instantiated directly. Instead, a Generator
instance can be returned from a generator function:
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
Instance methods
Generator.prototype.next()
-
Returns a value yielded by the
yield
expression. Generator.prototype.return()
-
Returns the given value and finishes the generator.
Generator.prototype.throw()
-
Throws an error to a generator (also finishes the generator, unless caught from within that generator).
Examples
An infinite iterator
With a generator function, values are not evaluated until they are needed. Therefore a generator allows us to define a potentially infinite data structure.
function* infinite() {
let index = 0;
while (true) {
yield index++;
}
}
const generator = infinite(); // "Generator { }"
console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// ...
Specifications
Specification |
---|
ECMAScript Language Specification # sec-generator-objects |
Browser compatibility
BCD tables only load in the browser