为了账号安全,请及时绑定邮箱和手机立即绑定

嵌套运算符是否使用 takeUntil 取消订阅?

嵌套运算符是否使用 takeUntil 取消订阅?

PIPIONE 2022-12-29 15:11:03
在以下代码中发出 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 的返回值也将结束。

我希望它的解释不是太复杂,简短的版本是当使用管道时,一切都已连接,因此当您取消订阅时,它会取消订阅所有来源。


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信