使用 takeUntilDestroyed 声明的 2 个可观察量,合并时需要额外的 takeUntilDestroyed 吗?

问题描述 投票:0回答:1

我正在使用 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())...
}
angular rxjs
1个回答
0
投票

您不需要在服务上添加

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())...
}
© www.soinside.com 2019 - 2024. All rights reserved.