2017-10-19 209 views
-2

如何使用takeUntil取消订阅观察值?如何使用Angular2中的takeUntil取消订阅观察值

根据我的理解,takeUntil自动为您完成。

以下是我通常如何从observable取消订阅。 但不知道如果做得正确。我真的需要“this.destroyed $ .complete();”如果takeUntil对我来说是完整的?

这是我的作品,但不能确定当前的尝试,如果最好的方法:

private destroyed$: Subject<void> = new Subject(); 

ngOnIt(): void { 
    this.serviceA.getData 
     .takeUntil(this.$destroyed) 
     .subscribe(val => { 
     console.log('Current value:', val); 
     }); 
    }; 

    ngOnDestroy(): void { 
    this.destroyed$.next(); 
    this.destroyed$.complete(); 
    }; 

我想消除在ngOnDestory的.complete但不能肯定是否会导致内存泄漏的?

+2

你检查此链接:https://stackoverflow.com/questions/38008334/angular-rxjs-when-should-i-unsubscribe-from-subscription?* – Wandrille

+0

该链接有很多例子,我只是想要一个真正的答案,如果我正确的做对了吗?感谢您的链接 – AngularM

+1

只需阅读验证答案:---编辑3 - “官方”解决方案(2017/04/09)。这是最好的方式,由角度 – Wandrille

回答

1

个人而言,我更喜欢这种解决方案,有另一个问题只是为了处理退订,并与takeUntil混合起来可能使事情太复杂

private _subscriptions:Subscription[]; 

ngOnIt(): void { 
    this._subscriptions.push(this.serviceA.getData 
    .subscribe(val => { 
    console.log('Current value:', val); 
    }) 
    ) 
}; 

ngOnDestroy(): void { 
this._subscriptions.foreach(subs=>{ subs.unsubscribe()}) 
}; 
+0

我更喜欢我的解决方案。但@Fan这将是很好的知道,如果你肯定是有效的,因为它缺少一个完整的() – AngularM

+0

目标是取消订阅NgDestroy上的所有内容,oncomplete是完整的副作用在你的方法摧毁主题,因此它不是相关的。 –