Multicasted Observable¶
Ранее говорилось, что объекты RxJS Observable
выполняются для каждого вызова метода subscribe()
уникально, в отличие от RxJS Subject
. Но это не совсем так. При необходимости можно создать Multicasted Observable, который позволяет в рамках одного и того выполнения регистрировать сразу несколько обработчиков.
multicast()¶
Такие объекты создаются с помощью метода RxJS multicast()
, а в их основе находятся объекты Subject
.
1 2 3 4 5 6 7 8 9 |
|
RxJS multicast(
) принимает Subject
, который регистрирует на себя всех "потребителей" и который сам регистрируется в качестве обработчика для исходного объекта Observable
.
В результате получается объект типа ConnectableObservable
— стандартный Observable
с методом connect()
. Именно вызов connect()
инициирует выполнение исходного объекта и возвращает его контекст (объект с unsubscribe()
).
Объект Subject
можно передать двумя способами: напрямую и с использованием фабричной функции. В первом случае после завершения выполнения объекта новые "потребители" получат только уведомление о завершении (обработка complete
) и все, тогда как фабричная функция запустит новое исполнение объекта.
refCount()¶
Метод RxJS refCount()
облегчает работу с ConnectableObservable
.
При регистрации первого обработчика он автоматически начинает выполнение исходного объекта (вызывается connect()
), а когда не остается ни одного "потребителя" автоматически завершает его выполнение (вызывается unsubscribe()
).
Так отпадает необходимость в ручном контроле таких объектов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Использовать refCount()
можно только с объектами ConnectableObservable
.