Как я могу приостановить shareReplay, когда нет подписчиков - PullRequest
1 голос
/ 16 апреля 2019

Например:

const s = rxjs.interval(2000).pipe(tap(console.log), shareReplay(1))
const b = s.subscribe(v => {})
// wait, console will begin output 0, 1, 2, 3, ...
b.unsubscribe()
// console will continue output 4, 5, 6, 7, ...

Я хочу, чтобы мой поток был приостановлен, когда нет подписчиков для сохранения загрузки ЦП.

Как приостановить поток, когда нет подписчиков?

Цель состоит в том, чтобы позволить нескольким подписчикам совместно использовать один поток.

  • Когда приходит первый подписчик, поток будет начинаться с начального значения и периодически предоставлять данные.
  • Когда приходит новый подписчик, он получает самое последнее значение в потоке.
  • Когда все подписчики ушли, поток данных можно безопасно закрыть, следующий пришедший будет рассматриваться как первый.

1 Ответ

1 голос
/ 16 апреля 2019

Вам понадобится multicast для обмена данными через ReplaySubject, с refCount для отслеживания количества подписчиков.

const s = rxjs.interval(2000).pipe(
  tap(console.log), 
  multicast(() => new ReplaySubject(1)),
  refCount()
);

const b = s.subscribe(v => {})

setTimeout(()=>{
  b.unsubscribe()
}, 5000)
...