javascript - 冷可观察量的用例是什么?

标签 javascript rxjs observable

我理解热和冷可观察量之间的区别,但我总是看到人们使用热可观察量而不是冷;事实上,如果有人不小心使用了一个冷的 Observable,就会被认为是一个错误,因为它通常是导致不良行为的原因。

在什么情况下您更喜欢或使用冷 Observable 而不是热 Observable?

最佳答案

首先请大家点评Hot and Cold observables : are there 'hot' and 'cold' operators?以确保您对热与冷有透彻的了解。

Cold observables 允许生产者懒惰,这是一个非常理想的特性。在没有使用这些值(value)(没有消费者)的情况下产生值(value)(生产可能很昂贵)是一种浪费。由于这种冷可观察量是构建 block ......更经常地派生出热可观察量。

因此,冷可观察量最常见的用例是懒惰地派生热可观察量。如果您考虑一下,您需要以某种方式以编程方式构建这些热可观察量。一种方法是使用主题(然后您就是制作人)。另一种方法是通过运算符从其他预先存在的 observables 派生它们,预先存在的 observables 也从其他人派生等等。在链的末尾,你应该找到 Rx.Observable.create ,那就是一个冷的 Observable。

当您需要惰性时(仅当有消费者时才开始生产值,或控制生产过程的开始),您可以使用冷观察。例如,defer 允许您仅在有消费者时启动生产者。例如,当您有一个热门的可观察对象但您还没有准备好收听它时,可以使用它。

当您需要重现一个产生值(value)的过程时,您还需要冷可观察对象(每个新订阅者都将重新启动完全相同的过程)。例如,出于测试目的,您希望多次使用完全相同的序列,但在不同的时间针对不同的消费者。

最后,这个问题听起来更像是一个哲学问题。您有两种工具可供使用,重要的是了解您需要什么、您拥有什么以及适合您的用例。

关于javascript - 冷可观察量的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36968402/

相关文章:

javascript - Opera 和 Firefox 给了我不同的上下文

javascript - 在 foreach 循环中遍历 HTML DOM 元素

javascript - 不使用BehaviorSubject 调用映射函数的奇怪情况

Angular "APP_INITIALIZER"在 Angular 4 中有没有 promise 的服务?

javascript - 如何清空 Angular 4 中的可观察对象

java - 如何在Java中观察一个简单的 float ?

javascript - 如何仅查询 Mongoose 中的子路径而不精确任何值?

javascript - 为什么我的 $watch 只触发一次?

javascript - 如何在 Angular 2 中使用 RXJS 观察自定义事件?

Angular 2 RxJS observable 在submitForm上取消订阅