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

时间:2020-08-10 15:09:03

标签: javascript rxjs

在以下代码中发出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));

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,不会有内存泄漏。

要了解您需要了解管道的工作原理- 不调用订阅-没有订阅,无论您放置什么运算符,pipe做什么,它都会创建一个新的可观察对象,该对象在订阅时订阅源可观察对象,而在取消订阅时,则退订可观察的源。 即使您在此处有两个管道,“取消订阅”也会冒泡。例如,当destroy $发出时,最新的合并订阅将结束,每个combineLatest参数订阅将结束,然后您使用mergeMap的管道的响应将结束,这意味着mergeMap的返回值也将结束。 / p>

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