【问题标题】:Hows best to unsubscribe from an observable using a takeUntil in Angular2如何最好地在 Angular2 中使用 takeUntil 取消订阅 observable
【发布时间】:2017-10-19 20:12:02
【问题描述】:

如何最好地使用 takeUntil 取消订阅 observable。

据我了解 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,但不确定这是否会导致内存泄漏?

【问题讨论】:

  • 你检查过这个链接吗:stackoverflow.com/questions/38008334/…?*
  • 那个链接有很多例子,如果我做得对,我真的想要一个答案?谢谢你的链接
  • 只需阅读验证答案:--- 编辑 3 - “官方”解决方案 (2017/04/09)。这是最好的方法,由来自 Angular 的团队成员验证
  • Wandrille,我也读过你提到的那一点,看来我上面的解决方案是正确的。你同意吗?
  • 是的,这是个好办法。

标签: angular rxjs


【解决方案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()})
};

【讨论】:

  • 我更喜欢我的解决方案。但是@Fan 很高兴知道你的是否确实有效,因为它缺少一个完整的()
  • 目标是取消订阅 NgDestroy 上的所有内容,oncomplete 是您的方法中完整的副作用销毁主题,因此它不太相关。
猜你喜欢
  • 2017-04-10
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多