我使用 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'
该服务,它就永远不会被销毁。因此,请保持该状态直到组件级别被破坏,以防止出现问题。
在组件中
takeUntilDestroyed
我认为最好的方法是只在实际调用的地方调用subscribe
。没有必要调用takeUntilDestroyed
仅使用管道订阅的可观察对象async
或将其组合成不同的可观察对象。takeUntilDestroyed
是一种清理订阅的方法,但它是一个不知道订阅发生在哪里的操作符。最好的地方是在你subscribe
观察之前调用它。