Rxjs 如何知道 observable 有多少订阅者?

Posted

技术标签:

【中文标题】Rxjs 如何知道 observable 有多少订阅者?【英文标题】:Rxjs how to know how many subscribers observable have? 【发布时间】:2017-03-02 15:34:01 【问题描述】:

当我有多个订阅者订阅一个 observable 时,例如:

const myInterval = Rx.Observable.interval(500);

const subscriptionOne = myInterval.subscribe(val => doSomething());
const subscriptionTwo = myInterval.subscribe(val => doSomething());

我怎么知道有多少订阅者仍然注册到 myInterval observable?例如,我需要这些信息来防止内存泄漏,以防我忘记退订其中之一?

【问题讨论】:

【参考方案1】:

当使用 Angular 2 时,你应该尽量使用异步管道,因为当你的组件被销毁时,它会自动为你取消订阅。

话虽如此。您在这里可观察到的区间是冷可观察的。这意味着,对于每个订阅,都会设置值的生产者。这意味着,每次都会创建一个新订阅。因此,知道您仍然有多少订阅冷可观察是您无法回答的问题。

恐怕您唯一能做的就是以干净的方式管理您的订阅,并尽可能地依赖 Angular。

【讨论】:

例如,如果我在我的组件中使用表单中的 valueChanges.subscribe?我需要手动退订吗?

以上是关于Rxjs 如何知道 observable 有多少订阅者?的主要内容,如果未能解决你的问题,请参考以下文章

RxJs。如果我有两个 observable,如何抛出错误并继续发出值?

如何从 TextInput(onChange 或 onTextChange)创建 rxjs Observable

Observable .do() 运算符 (rxjs) 的用例

如何在 RxJS 中停止 Observable 的间隔

RxJS:如何将 Observable<Observable<Thing>> 转换为 Observable<Thing[]>

如何在 Angular/RxJS 中合并两个 observable?