Расскажите про Observable и Subject в RxJS — чем отличаются, какие виды Subject знаете?

В RxJS Observable — это поток данных, который можно подписать и получать асинхронные события. Observable по умолчанию холодный: он начинает эмитить значения только после подписки.

Короткий ответ

Что ответить на собеседовании

В RxJS Observable — это поток данных, который можно подписать и получать асинхронные события. Observable по умолчанию холодный: он начинает эмитить значения только после подписки.

Подробный разбор

Ответ с пояснениями

В RxJS Observable — это поток данных, который можно подписать и получать асинхронные события. Observable по умолчанию холодный: он начинает эмитить значения только после подписки.

Subject — это особый тип Observable, который одновременно является и наблюдаемым, и наблюдателем. Subject горячий, то есть начинает эмитить значения сразу, и подписчики получают только те значения, которые были выпущены после их подписки.

Виды Subject:

  • Subject — базовый класс, мультикастит значения всем подписчикам.
  • BehaviorSubject — хранит текущее значение и при подписке сразу отдаёт его новому подписчику.
  • ReplaySubject — хранит заданное количество предыдущих значений и при подписке воспроизводит их.
  • AsyncSubject — эмитит только последнее значение при завершении Observable.

Пример использования Subject:

const subject = new Subject<number>();
subject.subscribe(value => console.log('Subscriber 1:', value));
subject.next(1);
subject.subscribe(value => console.log('Subscriber 2:', value));
subject.next(2);

Вывод:

Subscriber 1: 1
Subscriber 1: 2
Subscriber 2: 2

Видно, что второй подписчик получил только значения, эмитированные после подписки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее