在以下代码中发出 destroyed$ 时, 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));谢谢!
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
是的,不会有内存泄漏。
要理解你需要理解管道是如何工作的 - 不调用订阅 - 没有订阅,不管你放了什么操作符,它做了什么pipe
,它是否创建了一个新的可观察对象,在订阅时,订阅source observable,并且在取消订阅时,它取消订阅 source observable。即使你在这里有两个管道 - “取消订阅”也会冒出来。也就是说,当 destroyed$ 发出组合最新订阅将结束时,每个 combineLatest 参数订阅将结束,而不是您使用 mergeMap 的管道的响应将结束,这意味着 mergeMap 的返回值也将结束。
我希望它的解释不是太复杂,简短的版本是当使用管道时,一切都已连接,因此当您取消订阅时,它会取消订阅所有来源。
添加回答
举报
0/150
提交
取消