在以下代码中发出destroy $时, takeUntil 是否将管理 mergeMap 的订阅?换句话说,mergeMap泄漏是订阅吗?
combineLatest([
this.selectedCustomerId$.pipe(
-->mergeMap<--(customerId => invoicesService.getInvoices(customerId)
),
this.configuration$
]).pipe(
takeUntil(this.destroyed$)
).subscribe([invoices, configuration] => this.displayInvoices(invoices, configuration));
谢谢!
答案 0 :(得分:1)
是的,不会有内存泄漏。
要了解您需要了解管道的工作原理-
不调用订阅-没有订阅,无论您放置什么运算符,pipe
做什么,它都会创建一个新的可观察对象,该对象在订阅时订阅源可观察对象,而在取消订阅时,则退订可观察的源。
即使您在此处有两个管道,“取消订阅”也会冒泡。例如,当destroy $发出时,最新的合并订阅将结束,每个combineLatest参数订阅将结束,然后您使用mergeMap的管道的响应将结束,这意味着mergeMap的返回值也将结束。 / p>
我希望它的解释不太复杂,简短的版本是使用管道时,所有内容都已连接,因此当您取消订阅时,它将取消订阅所有源。