首页 > 解决方案 > 为什么嵌套订阅不好?

问题描述

我知道应该避免嵌套订阅并且应该使用 rxjs 操作符,但是我发现的关于这个问题的文章通常只是说嵌套订阅不好而没有解释原因(除了说'可能导致问题')。

我想知道是否有人可以帮助解决这个问题?谢谢你。

标签: angularrxjs

解决方案


很好,因为这是一个常见问题。

考虑类似的东西

service.cal1().subscribe(val => {
  service.call2(val).subscribe( res => {
    *does things*
  }
}

你触发的是一个新的订阅(因此是一个新的执行管道),每个值由 Observable 发出call1()。这会给你留下数百个未处理的 Observables 和 Subscriptions,它们暂时都留在内存中。

您需要知道,当您subscribe()多次访问 Observable 时,您的订阅者不会监听完全相同的源,而是会触发您定义的 Observable 管道的新副本。

如可观察文档中的第一个示例所述

订阅时立即(同步)推送值 1、2、3 的 Observable

强调我的

Observable 自己什么都不做,只要订阅就开始它的整个旅程

这就是为什么您会尝试使用类似switchMap()的方法来更改另一个调用,而不是保留原始订阅。


推荐阅读