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

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

谢谢!


PIPIONE
浏览 58回答 1
1回答

慕莱坞森

是的,不会有内存泄漏。要理解你需要理解管道是如何工作的 - 不调用订阅 - 没有订阅,不管你放了什么操作符,它做了什么pipe,它是否创建了一个新的可观察对象,在订阅时,订阅source observable,并且在取消订阅时,它取消订阅 source observable。即使你在这里有两个管道 - “取消订阅”也会冒出来。也就是说,当 destroyed$ 发出组合最新订阅将结束时,每个 combineLatest 参数订阅将结束,而不是您使用 mergeMap 的管道的响应将结束,这意味着 mergeMap 的返回值也将结束。我希望它的解释不是太复杂,简短的版本是当使用管道时,一切都已连接,因此当您取消订阅时,它会取消订阅所有来源。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript