Symbol.asyncIterator
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с января 2020 года.
Статическое свойство данных Symbol.asyncIterator представляет собой хорошо известный символ Symbol.asyncIterator. Протокол асинхронной итерации ищет этот символ для метода, который возвращает асинхронный итератор для объекта. Для того чтобы объект был асинхронно итерируемым, он должен иметь ключ [Symbol.asyncIterator].
Попробуйте
const delayedResponses = {
delays: [500, 1300, 3500],
wait(delay) {
return new Promise((resolve) => {
setTimeout(resolve, delay);
});
},
async *[Symbol.asyncIterator]() {
for (const delay of this.delays) {
await this.wait(delay);
yield `Delayed response for ${delay} milliseconds`;
}
},
};
(async () => {
for await (const response of delayedResponses) {
console.log(response);
}
})();
// Expected output: "Delayed response for 500 milliseconds"
// Expected output: "Delayed response for 1300 milliseconds"
// Expected output: "Delayed response for 3500 milliseconds"
Значение
Хорошо известный символ Symbol.asyncIterator.
Атрибуты свойства Symbol.asyncIterator
| |
|---|---|
| Записываемый | нет |
| Перечислимый | нет |
| Настраиваемый | нет |
Примеры
Пользовательские асинхронные итераторы
Вы можете определить свой собственный асинхронный итератор, установив свойство [Symbol.asyncIterator]() для объекта.
const myAsyncIterable = {
async *[Symbol.asyncIterator]() {
yield "hello";
yield "async";
yield "iteration!";
},
};
(async () => {
for await (const x of myAsyncIterable) {
console.log(x);
}
})();
// Logs:
// "hello"
// "async"
// "iteration!"
При создании API помните, что асинхронные итераторы предназначены для представления чего-то *итерируемого*, например, потока данных или списка, а не для полной замены колбэков и событий в большинстве ситуаций.
Встроенные асинхронные итераторы
В базовом языке JavaScript нет объекта, который был бы асинхронно итерируемым. Некоторые веб-API, такие как ReadableStream, по умолчанию имеют метод Symbol.asyncIterator.
Спецификации
Совместимость с браузерами
| Настольные ПК | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
См. также
© 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/Symbol/asyncIterator