Расскажите про Observable и Subject в RxJS — чем отличаются, какие виды Subject знаете?
Ответ от нейросети
sobes.tech AI
В 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
Видно, что второй подписчик получил только значения, эмитированные после подписки.