Spec-Zone.ru › JavaScript

AsyncGenerator

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

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

Объект AsyncGenerator возвращается асинхронной функцией-генератором и соответствует как протоколу асинхронного итерирования, так и протоколу асинхронного итератора.

Методы асинхронного генератора всегда возвращают (yield) объекты Promise.

AsyncGenerator является подклассом скрытого класса AsyncIterator.

Конструктор

Не существует сущности JavaScript, которая соответствовала бы конструктору AsyncGenerator. Экземпляры AsyncGenerator должны быть возвращены из асинхронных функций-генераторов:

async function* createAsyncGenerator() {
  yield Promise.resolve(1);
  yield await Promise.resolve(2);
  yield 3;
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res.value)); // 1
asyncGen.next().then((res) => console.log(res.value)); // 2
asyncGen.next().then((res) => console.log(res.value)); // 3

Существует только скрытый объект, который является объектом-прототипом, общим для всех объектов, созданных асинхронными функциями-генераторами. Этот объект часто стилизуют как AsyncGenerator.prototype, чтобы он выглядел как класс, но его более уместно называть AsyncGeneratorFunction.prototype.prototype, поскольку AsyncGeneratorFunction является фактической сущностью JavaScript. Чтобы понять цепочку прототипов экземпляров AsyncGenerator, см. AsyncGeneratorFunction.prototype.prototype.

Свойства экземпляра

Эти свойства определены в AsyncGenerator.prototype и являются общими для всех экземпляров AsyncGenerator.

AsyncGenerator.prototype.constructor

Функция-конструктор, создавшая объект экземпляра. Для экземпляров AsyncGenerator начальным значением является AsyncGeneratorFunction.prototype.

Примечание: Объекты AsyncGenerator не хранят ссылку на асинхронную функцию-генератор, которая их создала.

AsyncGenerator.prototype[Symbol.toStringTag]
Начальным значением свойства [Symbol.toStringTag] является строка "AsyncGenerator". Это свойство используется в Object.prototype.toString().

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

Также наследует методы экземпляра от своего родительского объекта AsyncIterator.

AsyncGenerator.prototype.next()
Возвращает Promise, который будет разрешен с заданным значением, возвращенным (yielded) выражением yield.
AsyncGenerator.prototype.return()
Действует так, как если бы оператор return был вставлен в тело генератора в текущей приостановленной позиции, что завершает работу генератора и позволяет ему выполнять любые задачи очистки в сочетании с блоком try...finally.
AsyncGenerator.prototype.throw()
Действует так, как если бы оператор throw был вставлен в тело генератора в текущей приостановленной позиции, что информирует генератор об условии ошибки и позволяет ему обработать ошибку, выполнить очистку или закрыть себя.

Примеры

Итерирование асинхронного генератора

Следующий пример выполняет итерацию по асинхронному генератору, выводя значения 1–6 в консоль с уменьшающимися временными интервалами. Обратите внимание, как каждый раз генерируется Promise (обещание), который автоматически разрешается внутри цикла for await...of.

// 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* generate() {
  yield delayedValue(2000, 1);
  yield delayedValue(1000, 2);
  yield delayedValue(500, 3);
  yield delayedValue(250, 4);
  yield delayedValue(125, 5);
  yield delayedValue(50, 6);
  console.log("All done!");
}

async function main() {
  for await (const value of generate()) {
    console.log("value", value);
  }
}

main().catch((e) => console.error(e));

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-asyncgenerator-objects

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

Десктопные Мобильные Серверные
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
AsyncGenerator
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0
next
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0
return
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0
throw
63
79
55
50
12
63
55
46
12
8.0
63
12
1.0.0
1.0
10.0.0

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

  • function*
  • async function*
  • function* expression
  • Функция-генератор
  • Асинхронная функция-генератор
  • Руководство по итераторам и генераторам

© 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

Spec-Zone.ru

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