我想可以继续订阅一个observable而忘记取消订阅.我怀疑这是在我的申请中发生的.观察者是否有一个属性可以给我一个挂掉它的订户的数量?
Ben*_*tan 10
虽然绝对有可能忘记取消订阅,并且泄漏会产生从永不停止到内存泄漏的测试运行器的影响,但angular2有一些工具和常用模式来管理其生命周期.
angular2提供了一种不容忘记的简单方法.在模板中使用时,最简单的方法是简单地使用异步管道,它将自动为您订阅和取消订阅.
否则,当您使用.subscribe()方法时,它将返回订阅.一个常见的做法是抓住在构造函数中注入依赖关系,使内组件的必要订阅ngOnInit和内退订ngOnDestroy.
有时,您将订阅多个可观察量.RxJS将类Rx.Subscription一起提供给组订阅.它可以通过以下方式使用:
const incomeSubscription = income$.subscribe(x => console.log(x));
const expensesSubscription = expenses$.subscribe(x => console.log(x));
const subscription = new Rx.Subscription();
subscription.add(incomeSubscription);
subscription.add(expensesSubscription);
Run Code Online (Sandbox Code Playgroud)
现在调用subscription.unsubscribe()将取消订阅任何仍处于活动状态的订阅.
最后,重要的是要理解默认情况下RxJS流是单播的(与始终缓存结果且仅是多播的promises不同).这实际上意味着每个订阅实际上成为一个新的rx流.例如,对于像Http.get()这样的"冷"可观察对象,每个订阅实际上都会从头开始生成数据.因此,在提到的Http.get()的情况下,您将为每个订阅(或在模板中使用管道异步的实例)进行HTTP调用.
这意味着良好的做法是:
仅在容器样式组件中使用异步管道,并且具有对RxJS一无所知的哑表示组件.这有助于仅在容器级别订阅
如果在订阅者之间共享数据以在某些情况下使用像.refCount()这样的运算符或在其他情况下使用主题.这使得流组播和订阅者共享相同的流而不是每个都有自己的流
| 归档时间: |
|
| 查看次数: |
5212 次 |
| 最近记录: |