您好,Angular非常新。我有大約4個數據庫查詢,每個都是Subscriptions(rxjs/Rx)
。所以我知道我需要取消訂閱每個訂閱以節省內存泄漏。我怎樣才能優化呼叫?我的意思是,我不想打電話給每個訂閱並逐個取消訂閱。我想在一次通話中完成所有取消訂閱。對不起,如果它是一個愚蠢的問題。任何想法的傢伙?在此先感謝取消訂閱訂閱的最簡單方法Angular
3
A
回答
4
subscriptions = Subscription[];
someMethod() {
this.subscriptions.push(http.get(...).map(...).subscribe(...));
}
ngOnDestory
this.subscriptions.forEach(s => s.unsubscribe());
}
當observable完成時,取消訂閱是多餘的。取消訂閱僅適用於繼續發射事件而未完成的觀測值。
如果您只想接收單個事件(或其他數量有限的事件),則可以通過使用像take(x)
這樣的操作符,然後在x
事件後完成可觀察事件來控制您訂閱的可觀察事件何時完成。
0
還有做另一種有趣的方式:
@Component({ ... })
export class SomeComponent implements OnInit, OnDestroy {
private componentDestroyed$ = new Subject();
...
ngOnInit() {
this.yourObs1$.takeUntil(componentDestroyed$).subscribe(...);
this.yourObs2$.takeUntil(componentDestroyed$).subscribe(...);
this.yourObs3$.takeUntil(componentDestroyed$).subscribe(...);
...
this.yourObsX$.takeUntil(componentDestroyed$).subscribe(...);
}
ngOnDestroy() {
this.componentDestroyed$.next();
this.componentDestroyed$.complete();
}
}
在這裏,你甚至都不需要保持一個訂閱,你的閱讀方式的軌道是更友好的開發(我認爲)。
Ben Lesh在Medium上解釋它,我喜歡這種方式取消訂閱!
0
export class BaseComponent implements OnDestroy {
protected alive$: Subject<void> = new Subject<void>();
ngOnDestroy(): void {
// console.log("unsubscribing base component");
this.alive$.next();
this.alive$.complete();
}
}
export class EveryComponent extends BaseComponent {
this.AllObs1$.takeUntil(this.alive$).subscribe(...);
}
相關問題
- 1. 訂閱取消訂閱()
- 2. Angular - 無法從事件取消訂閱()
- 3. 取消訂閱socket.io中的訂閱
- 4. RxJava:不會調用訂閱的取消訂閱()方法
- 5. Angular 2通過按鈕訂閱/取消訂閱
- 6. 主題<any>捕獲訂閱和取消訂閱方法
- 7. 如何取消訂閱socket.io訂閱?
- 8. Rxjs - 重新訂閱取消訂閱Observable
- 9. 如何取消訂閱Weak訂閱MvvmCross
- 10. 訂閱/取消訂閱VS Create/TakeUntil?
- 11. 取消訂閱/訂閱活動危險?
- 12. 訂閱和取消訂閱活動
- 13. 如何取消訂閱NServiceBus訂閱?
- 14. 動態訂閱/取消訂閱活動
- 15. SerialPort.DataReceived重複訂閱/取消訂閱
- 16. 訂閱Angular的另一個訂閱
- 17. 無法取消訂閱PubNub
- 18. 取消iOS訂閱
- 19. Android訂閱取消
- 20. Angular訂閱,我如何製作方法訂閱
- 21. 多播代表訂閱/取消訂閱按鈕單擊事件
- 22. 簡單的RSS訂閱
- 23. 測試訂閱observable的方法 - Angular 2
- 24. 收取PayPal訂閱取消
- 25. 取消Elm中的訂閱
- 26. 取消訂閱的問題
- 27. 訂閱/取消訂閱(添加/刪除)到擴展方法內部的事件
- 28. RxSwift - 訂閱方法
- 29. Spring STOMP訂閱的最佳實踐 - 訂閱消息確認
- 30. 最簡單的方法來保存外部RSS訂閱
閱讀這可能幫助:https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87 – cartant
您不需要退訂http://stackoverflow.com/questions/35042929/do -you-need-to-unsubscribe-from-angular-2-http-calls-to-prevent-memory-leak –