【发布时间】:2021-09-10 23:30:54
【问题描述】:
如果我有一个组件并且我想使用 takeuntil 取消订阅,从下面的 Before 切换到 After 会导致内存泄漏(使用多个主题时)
之前
class OnInit, OnDestroy{
private subjectA: Subject<TypeA> = new Subject();
public subjectA$: Observable<TypeA> = this.subjectA.asObservable();
ngOnDestroy {
this.subjectA.complete();
}
}
之后
class OnInit, OnDestroy{
private subjectA: Subject<TypeA> = new Subject();
private destroy$: Subject<boolean> = new Subject();
public subjectA$: Observable<TypeA> = this.subjectA.asObservable.pipe(takeUntil(this.destroy$));
onDestroy {
this.destroy$.next(true);
this.destroy$.unsubscribe();
}
}
我问的原因是私有主体永远不会真正被破坏——它只是停止从中获取。
【问题讨论】:
-
你在哪里订阅它?如果您使用的是异步管道,则无需手动取消订阅
-
它用于目前不允许异步管道的服务
-
在 99% 的情况下,您不应该订阅服务,所以我会说开始在这里挖掘或尽可能分享更多代码
标签: angular rxjs observable