Files
frontend-docs/docs/javascript/09-generators/02-async-iterators-generators.md
2025-03-05 16:38:24 +03:00

31 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 2
---
# Асинхронные итераторы и генераторы
Источник: [https://learn.javascript.ru/async-iterators-generators](https://learn.javascript.ru/async-iterators-generators)
Обычные итераторы и генераторы прекрасно работают с данными, которые не требуют времени для их создания или получения.
Когда мы ожидаем, что данные будут поступать асинхронно, с задержками, можно использовать их асинхронные аналоги и for
await..of вместоfor..of.
Синтаксические различия между асинхронными и обычными итераторами:
| | Перебираемый объект | Асинхронно перебираемый |
|-------------------------------|-----------------------------|-----------------------------------------------------------|
| Метод для получения итератора | Symbol.iterator | Symbol.asyncIterator |
| next() возвращает | {value:…, done: true/false} | промис, который завершается с {value:…, done: true/false} |
Синтаксические различия между асинхронными и обычными генераторами:
| | Генераторы | Асинхронные генераторы |
|-----------------------------|-----------------------------|-----------------------------------------------------------|
| Объявление | function* | async function* |
| generator.next() возвращает | {value:…, done: true/false} | промис, который завершается с {value:…, done: true/false} |
В веб-разработке мы часто встречаемся с потоками данных, когда они поступают по частям. Например, загрузка или выгрузка большого файла.
Мы можем использовать асинхронные генераторы для обработки таких данных. Также заметим, что в некоторых окружениях, например, браузерах, есть и другое API, называемое Streams (потоки), который предоставляет специальные интерфейсы для работы с такими потоками данных, их преобразования и передачи из одного потока в другой (например, загрузка из одного источника и сразу отправка в другое место).