Spec-Zone.ru › JavaScript

AsyncIterator

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

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

Объект AsyncIterator — это объект, соответствующий протоколу асинхронного итератора, предоставляя метод next(), который возвращает промис, разрешающийся в объект результата итератора. Объект AsyncIterator.prototype — это скрытый глобальный объект, от которого наследуются все встроенные асинхронные итераторы. Он предоставляет метод [Symbol.asyncIterator](), который возвращает сам объект асинхронного итератора, делая асинхронный итератор также асинхронно итерируемым.

Обратите внимание, что AsyncIterator не является глобальным объектом, хотя это будет так в будущем с предложением по вспомогательным функциям асинхронного итератора. Объект AsyncIterator.prototype, общий для всех встроенных асинхронных итераторов, можно получить с помощью следующего кода:

const AsyncIteratorPrototype = Object.getPrototypeOf(
  Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),
);

Описание

В настоящее время единственным встроенным асинхронным итератором JavaScript является объект AsyncGenerator, возвращаемый асинхронными функциями-генераторами. Существуют и другие встроенные асинхронные итераторы в веб-API, например, итератор ReadableStream.

Каждый из этих асинхронных итераторов имеет отдельный объект-прототип, который определяет метод next(), используемый конкретным асинхронным итератором. Все эти объекты-прототипы наследуются от AsyncIterator.prototype, который предоставляет метод [Symbol.asyncIterator](), возвращающий сам объект асинхронного итератора, делая асинхронный итератор также асинхронно итерируемым.

Примечание: AsyncIterator.prototype не реализует [Symbol.iterator](), поэтому асинхронные итераторы по умолчанию не являются синхронно итерируемыми.

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

AsyncIterator.prototype[Symbol.asyncDispose]()
Вызывает и ожидает метод return() объекта this, если он существует. Это реализует протокол асинхронного освобождения ресурсов и позволяет освободить ресурс при использовании с await using.
AsyncIterator.prototype[Symbol.asyncIterator]()
Возвращает сам объект асинхронного итератора. Это позволяет объектам асинхронного итератора быть также асинхронно итерируемыми.

Примеры

Использование асинхронного итератора в качестве асинхронно итерируемого объекта

Все встроенные асинхронные итераторы также являются асинхронно итерируемыми, поэтому вы можете использовать их в цикле for await...of:

const asyncIterator = (async function* () {
  yield 1;
  yield 2;
  yield 3;
})();
(async () => {
  for await (const value of asyncIterator) {
    console.log(value);
  }
})();
// Logs: 1, 2, 3

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

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

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

Десктопные Мобильные Серверные
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
AsyncIterator
63
79
57
50
11.1
63
57
46
11.3
8.0
63
11.3
1.0.0
1.0
10.0.0
@@asyncDispose
134
134
141
119
preview
134
141
88
Нет
29.0
134
Нет
1.3.0
2.2.10
Нет
@@asyncIterator
63
79
57
50
11.1
63
57
46
11.3
8.0
63
11.3
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/AsyncIterator

Spec-Zone.ru

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