Spec-Zone.ru › JavaScript

AsyncGenerator.prototype.next()

Базовый уровень Широко доступно

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

Метод next() экземпляров AsyncGenerator возвращает следующее значение в последовательности.

Синтаксис

next()
next(value)

Параметры

value Необязательный
Необязательное значение, используемое для изменения внутреннего состояния генератора. Значение, переданное методу next(), будет получено yield

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

Объект Promise, который при разрешении возвращает Object с двумя свойствами:

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

Примеры

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

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

// An async task. Pretend it's doing something more useful
// in practice.
function delayedValue(time, value) {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve(value), time);
  });
}

async function* createAsyncGenerator() {
  yield delayedValue(500, 1);
  yield delayedValue(500, 2);
  yield delayedValue(500, 3);
}

const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res)); // { value: 1, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 2, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 3, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: undefined, done: true }

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

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

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

// An async task. Pretend it's doing something more useful
// in practice.
function sleep(time) {
  return new Promise((resolve, reject) => {
    setTimeout(resolve, time);
  });
}

async function* createAsyncGenerator() {
  while (true) {
    await sleep(500);
    const value = yield;
    console.log(value);
  }
}

async function main() {
  const asyncGen = createAsyncGenerator();
  // No log at this step: the first value sent through `next` is lost
  console.log(await asyncGen.next(1)); // { value: undefined, done: false }
  // Logs 2: the value sent through `next`
  console.log(await asyncGen.next(2)); // { value: undefined, done: false }
}

main();

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-asyncgenerator-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
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0

Смотрите также

  • async 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/AsyncGenerator/next

Spec-Zone.ru

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