我正在管理订阅的服务层。
我像这样向消费者提供主题支持的可观察物:
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) }
)
有没有办法像这样对对象进行自动清理?
答案 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>