angular - 为什么嵌套订阅不好?
问题描述
我知道应该避免嵌套订阅并且应该使用 rxjs 操作符,但是我发现的关于这个问题的文章通常只是说嵌套订阅不好而没有解释原因(除了说'可能导致问题')。
我想知道是否有人可以帮助解决这个问题?谢谢你。
解决方案
很好,因为这是一个常见问题。
考虑类似的东西
service.cal1().subscribe(val => {
service.call2(val).subscribe( res => {
*does things*
}
}
你触发的是一个新的订阅(因此是一个新的执行管道),每个值由 Observable 发出call1()
。这会给你留下数百个未处理的 Observables 和 Subscriptions,它们暂时都留在内存中。
您需要知道,当您subscribe()
多次访问 Observable 时,您的订阅者不会监听完全相同的源,而是会触发您定义的 Observable 管道的新副本。
如可观察文档中的第一个示例所述
订阅时立即(同步)推送值 1、2、3 的 Observable
强调我的
Observable 自己什么都不做,只要订阅就开始它的整个旅程
这就是为什么您会尝试使用类似switchMap()的方法来更改另一个调用,而不是保留原始订阅。
推荐阅读
- database - MS Access 数据库中的链接 Oracle 视图未刷新
- python - 转换为 numpy 数组使 tensorflow 梯度“无”
- android - 将下拉按钮添加到选项卡时,只能在初始化程序中访问静态成员
- interrupt - STM32 Usart 接收中断只工作一次
- android-studio - 无法在 Android Studio 中输入任何内容
- django - Django将相关对象添加到父实例
- node.js - express-handlebars:使用标签链接到车把
- pytorch - 生成随机种子以播种 Pytorch 的最佳实践?
- c++ - 了解 DCL60-CPP 中的不合规代码示例:遵守单一定义规则
- safari - Safari和Chrome中div内图像之间不需要的水平填充