Spec-Zone.ru › JavaScript

Generator.prototype.next()

Baseline Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2016 года.

Метод next() экземпляров Generator возвращает объект с двумя свойствами: done и value. Вы также можете передать параметр методу next, чтобы отправить значение в генератор.

Синтаксис

next()
next(value)

Параметры

value Необязательный

Значение для отправки в генератор.

Значение будет присвоено как результат выражения yield. Например, в variable = yield expression, значение, переданное функции .next(), будет присвоено variable.

Возвращаемое значение

Объект Object с двумя свойствами:

done
Логическое значение:
  • true, если генератор находится за пределами своего потока управления. В этом случае value указывает возвращаемое значение генератора (которое может быть undefined).
  • false, если генератор способен выдавать больше значений.
value
Любое значение JavaScript, выданное или возвращенное генератором.

Исключения

TypeError
Выбрасывается, если генератор уже запущен.

Примеры

Использование next()

Следующий пример показывает генератор и объект, который возвращает метод next:

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

const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }

Использование next() со списком

В этом примере getPage принимает список и "пагинирует" его на части размером pageSize. Каждый вызов next будет выдавать одну такую часть.

function* getPage(list, pageSize = 1) {
  for (let index = 0; index < list.length; index += pageSize) {
    yield list.slice(index, index + pageSize);
  }
}

const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }

page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }

Отправка значений в генератор

В этом примере next вызывается со значением.

Примечание: Первый вызов ничего не выводит, поскольку генератор изначально ничего не выдавал.

function* gen() {
  while (true) {
    const value = yield;
    console.log(value);
  }
}

const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-generator.prototype.next

Совместимость с браузерами

Настольные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
next
39
13
26
26
10
39
26
26
10
4.0
39
10
1.0.0
1.0
4.0.0

См. также

  • function*
  • Руководство по итераторам и генераторам

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API