📚
Вопрос: что такое
share(),
publish(),
multicast() в
RxJS?
🦊
Заваривайте кофейку, ответ будет длинным. Прежде чем переходить к следующему пункту обязательно разберитесь с предыдущим.
📢
Что такое Subject?Простыми словами,
Subject это телефон. В него можно говорить, и из него можно слушать одновременно.
Есть различные
Subject:
Subject,
ReplaySubject,
BehaviorSubject,
AsyncSubject.
Это основная база.🏰
Что такое multicast()?Оператор
multicast() на вход принимает
Subject или его фабрику. И передавая в него различные виды
Subject можно получить следующие комбинации:
multicast( new Subject()
)multicast( new ReplaySubject()
)multicast( new BehaviorSubject()
)Все это создает нам
ConnectableObservable, который позволяет расшарить
Subject на несколько потоков. Но у них всех будут разные стратегии работы, в зависимости от переданного
Subject.
Если вы все осилили, то дальше будет очень просто.🍬
Немного сахараОператоры
publish(),
publishReplay(),
publishBehavior() используют
mulicast() с определенным
Subject:
publish() ===
multicast( new Subject()
)publishReplay() ===
multicast( new ReplaySubject()
)publishBehavior() ===
multicast( new BehaviorSubject()
)Другими словами это все простой сахар, не забудьте его добавить в только что сваренный кофе.👨🏫
Считаем ссылкиОператор
refCount() реализует паттерн
RefCount и автоматически управляет
ConnectableObservable:
— если появляется подписчик, то он делает
connect;
— если появляется еще один подписчик, то ничего не происходит, используется тот же
connect;
— если все подписчики отпишутся, то он сделат
unsubscribe от коннекта к
ConnectableObservable.
🦄
Финальный боссОстались операторы
share(),
shareReplay().
share() ===
publish() +
refCount()shareReplay({
refCount:
true }
) ===
publishReplay() +
refCount()__
❤️
Теперь ты знаешь как это работает, отправь своим коллегам, пусть они тоже узнают.