Sobes.tech
Middle
18

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

Companies where asked
Элара

Answer from AI

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

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