我正在使用 takeUntilDestroyed 来管理我的订阅并避免内存泄漏。在注入上下文中,变量声明,我会有这样的东西
mySubject1$ = new BehaviourSubject<void>(void 0);
myData1$ = mySubject1$.pipe(takeUntilDestroyed(), switchMap(() => myService.getData1()));
mySubject2$ = new BehaviourSubject<void>(void 0);
myData2$ = mySubject2$.pipe(takeUntilDestroyed(), switchMap(() => myService.getData2()));
在我的构造函数中我想组合这些,我需要再次使用 takeUntilDestroyed() 吗?
constructor(){
combineLatest([myData1$, myData2$]).pipe(takeUntilDestroyed())...
}
您不需要在服务上添加
takeUntilDestroyed
,您需要将其添加到组件的订阅上(我的观点是组件经常被破坏,而不是服务)。
但看起来,当服务被销毁时,combineLatest 将被取消订阅,但如果您在服务上有
providedIn: 'root'
,则它永远不会被销毁。
因此,请保留该片段直至在组件级别上被破坏,以防止出现问题。
mySubject1$ = new BehaviourSubject<void>(void 0);
myData1$ = mySubject1$.pipe(switchMap(() => myService.getData1()));
mySubject2$ = new BehaviourSubject<void>(void 0);
myData2$ = mySubject2$.pipe(switchMap(() => myService.getData2()));
在组件中
constructor(){
combineLatest([myData1$, myData2$]).pipe(takeUntilDestroyed())...
}