Generator

Генератор - это объект, возвращаемый функцией-генератором и соответствующий как "Итерируемому" протоколу, так и протоколу "Итератор".

Конструктор

Этот объект не может быть инстанциирован напрямую. Вместо этого, экземпляр Generator может быть возвращён из функции-генератора:

function* generator() {
  yield 1;
  yield 2;
  yield 3;
}

const gen = generator(); // "Generator { }"

console.log(gen.next().value); // 1
console.log(generator().next().value); // 1
console.log(generator().next().value); // 1

Методы экземпляра

Generator.prototype.next()
Возвращает значение, полученное выражением yield.
Generator.prototype.return()
Возвращает заданное значение и заканчивает генератор.
Generator.prototype.throw()
Выдаёт ошибку генератора.

Пример

Бесконечный Итератор

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
// ...

Спецификации

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Generator objects' в этой спецификации.
Стандарт Initial definition.
ECMAScript (ECMA-262)
Определение 'Generator objects' в этой спецификации.
Живой стандарт

Совместимость

BCD tables only load in the browser

See also

Legacy generators

ES2015 generators