如果RxJs对象的refCount降为零,则执行某些操作

时间:2018-10-31 17:55:24

标签: rxjs observable

我正在管理订阅的服务层。

我像这样向消费者提供主题支持的可观察物:

const subject = new Subject();
_trackedSubjects.push(subject);
return subject.asObservable();

不同的消费者可能会监视该频道,因此每个主题可能都有几个可观察的事物。

我想监视subject.observers的计数,如果计数回落到0,请在我的库中进行一些清理。

我看过refCount,但这仅在Observable上可用。

我很想找到类似的东西:

subject.onObserverCountChange((cur, prev) =>
  if(cur === 0 && prev !== 0) { cleanUp(subject) }
)

有没有办法像这样对对象进行自动清理?

1 个答案:

答案 0 :(得分:0)

除了使用Subject之外,还应该在创建可观察的对象时描述设置/清除逻辑。参见示例:

const { Observable } = rxjs; // = require("rxjs")
const { share } = rxjs.operators; // = require("rxjs/operators")

const eventSource$ = Observable.create(o => {
  console.log('setup');
  let i = 0
  const interval = setInterval(
    () => o.next(i++),
    1000
  );

  return () => {
    console.log('cleanup');
    clearInterval(interval);
  }
});
const events$ = eventSource$.pipe(share());

const first = events$.subscribe(e => console.log('first: ', e));
const second = events$.subscribe(e => console.log('second: ', e));

setTimeout(() => first.unsubscribe(), 3000);
setTimeout(() => second.unsubscribe(), 5000);
<script src="https://unpkg.com/rxjs@6.2.2/bundles/rxjs.umd.min.js"></script>