没有订阅者时如何暂停shareReplay

时间:2019-04-16 08:10:13

标签: javascript rxjs observable

例如:

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, ...

当没有订阅者以节省CPU使用率时,我希望我的流暂停。

在没有订阅者的情况下如何暂停流?

目标是让多个订户共享一个流。

  • 第一个订户到来时,流将从初始值开始并定期提供数据。
  • 新订阅者到来时,它将获得流中的最新值。
  • 当所有订阅者都离开时,可以安全关闭数据流,下一个将被视为第一个。

1 个答案:

答案 0 :(得分:1)

您需要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)