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 (ECMAScript)
# sec-generator-objects

Browser compatibility

BCD tables only load in the browser

See also