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
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Смотрите также
© 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