RxJS: основы и терминология
Что такое реактивное программирование?
Парадигма программирования, ориентированная на потоки данных и распространение изменений. Упрощённо — приложение, управляемое потоком событий (например, клик мыши), за которым наблюдают подписчики и реагируют на события.
Ключевые понятия
- Observable — объект, представляющий ленивый поток значений во времени, на который можно подписаться (синхронно или асинхронно, от нуля до бесконечного числа значений).
- Observer — объект-обработчик, получающий уведомления от Observable. Имеет три метода:
next(),error(),complete(). - Producer — источник значений Observable (DOM-событие, HTTP-запрос, массив и т.д.).
- Consumer — код, который подписывается на Observable и получает значения.
- Subscription — объект, возвращаемый при подписке; нужен в первую очередь для отмены выполнения (
unsubscribe()).
Что такое оператор?
Операторы — функции для манипуляции и преобразования потоков Observable. Основные типы:
- Creation (создания)
- Transformation (преобразования)
- Filtering (фильтрации)
- Combination (комбинирования)
- Error handling (обработки ошибок)
Observable vs Promise
| Promise | Observable | |
|---|---|---|
| Количество значений | одно | несколько во времени |
| Ленивость | не ленив (запускается сразу) | ленив (запускается при подписке) |
| Отмена | нельзя отменить | можно через unsubscribe() |
| Операторы | нет | map, filter, retry и др. |
Обычный (cold) Observable ленив — не выполняется, пока на него не подпишутся. Hot-потоки (например, на базе Subject) могут излучать значения независимо от подписок.