【发布时间】: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() 的调用不是多余的吗?
【问题讨论】: