【问题标题】:angular rxjs subscription teardown角度 rxjs 订阅拆解
【发布时间】:2021-09-09 18:37:33
【问题描述】:

在 Angular 组件中拆除订阅有不同的模式。我一直在使用Subject / takeUntil 模式,形式如下:

export class FooComponent implements OnDestroy {
  private destroy$ = new Subject<void>();
...
  source$.pipe(takeUntil(this.destroy$)).subscribe(...);
...
  ngOnDestroy() {
    this.destroy$.next();
  }
}

今天有人告诉我在ngOnDestroy 中添加另一行:

this.destroy$.complete();

在做了一些研究之后,它确实出现在一些在线示例中而不是其他示例中,但无论哪种方式,我都没有看到这一点。查看Subject.complete 的源代码,它将遍历任何内部观察者并完成这些。假设我们不直接订阅 destroy$ 主题,那么这个内部观察者列表不应该总是为空吗?如果是这样的话,对this.destroy$.complete() 的调用不是多余的吗?

【问题讨论】:

标签: angular rxjs


【解决方案1】:

如果您仅将destroy$ 用于takeUntil() 运算符,则无需调用complete()

destroy$ 发出next takeUntil() 将完成从destroy$ 取消订阅的链,因此将没有订阅者,因此complete() 应该是不必要的。

顺便说一句,我也看到有人在这种情况下使用complete()。我现在找不到任何示例,但相比之下 ngrx/component-store is just calling next()

【讨论】:

  • 我只是把一个完整的习惯称为一个好习惯。
猜你喜欢
  • 2021-10-17
  • 2021-05-28
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2018-06-15
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多