我按照我的角組件的清理模式,看起來像這樣:我是否需要填寫一個主題才能被垃圾收集?
class SomeComponent implements OnInit, OnDestroy {
private destroy$ = new Subject();
ngOnInit() {
service.someStream().takeUntil(this.destroy$).subscribe(doSomething);
}
ngOnDestroy() {
this.destroy$.next(true);
}
}
這有當組件被銷燬自動退訂的好處。
我的問題是:對destroy$
的引用是否無限期地存在,是因爲我沒有調用this.destroy$.complete()
,還是會在收集父類時得到GC?
即使你沒有直接在主體上調用'complete()',你也可以用'takeUntil'操作符完成鏈,它會發送'complete'信號並使每個操作符遞歸地取消訂閱。因此,「完全」信號是來自主體還是來自更遠的鏈路,無關緊要。 – martin
@馬丁我認爲你的回答是不正確的。對我來說,takeUntil將完成您應用takeUntil的流。不是使用takeUntil的人。看看大理石圖:http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-takeUntil注意,當發射'z'時,最終流將關閉,但是包含'z'的流保持打開狀態。所以肖恩,是的,你需要打電話給下一個,也是完整的。 – Maxime
雖然我非常肯定它會在刪除父類的引用時得到GC'd。這種模式對我來說似乎很可疑,爲什麼你不只是在關閉所有流時跟蹤訂閱並調用'unsubscribe'呢? – paulpdaniels