📚
Вопрос: что такое 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()
❤️
Теперь ты знаешь как это работает,
отправь своим коллегам, пусть они тоже узнают.