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

时间:2017-10-19 20:12:03

标签: angular rxjs

最好使用takeUntil取消订阅观察。

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

以下是我通常如何取消订阅观察。 但不确定是否正确完成。我真的需要" 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,但不确定是否会导致内存泄漏?

1 个答案:

答案 0 :(得分: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()})
};