我了解热观测值和冷观测值之间的区别,但是我总是看到人们使用热观测值而不是冷观测值。实际上,如果有人不小心使用了感冒,就被认为是错误的,因为这通常是不良行为的原因。

在哪种情况下,您更喜欢或使用可观测的寒冷胜于可观测的寒冷?

最佳答案

答案的核心在于Ben Lesh的简洁总结:



在直接回答“在什么情况下,您更喜欢或使用可观察到的冷观测而不是热观测?”的问题中,我将提供一个一般性回答和一个具体示例。

通常,使用冷可观察性对每次需要创建的流进行建模要比创建热流并尝试对其进行纠缠要方便得多。

具体来说,请考虑以下简单示例。假设您想通过从10开始倒数​​来响应对按钮的单击,如果在倒数期间再次单击该按钮,它将再次从10开始。如果click $为按钮事件建模,您可能会遇到以下情况:

const subscription = click$
  .flatMapLatest(_ => Rx.Observable.interval(1000).take(10))
  .select(x => 10 - x)
  .subscribe(x => console.log('clicked: ' + x));

考虑在没有冷观测的情况下如何建模。您如何:
  • 预先初始化流,以便在需要时可以使用适当的值?
  • 避免在间隔时间和订阅时间之间花费一秒的时间吗?
  • 处理可以以任意数字而不是1开头的普通字符吗?
  • 管理流的清理逻辑吗?

  • 1和3可以很容易地解决,但是2和4很讨厌。

    在回答您的第二个问题“这是懒惰吗?”我认为不是。冷的可观察对象可以将其保留到订阅产生该值之前。一个热的可观察对象可以保留它直到订阅的那一刻钩住适当的事件。他们俩都以自己的方式(或者至少可以是)懒惰。主要区别在于Ben Lesh所说的:您是否每次都要创建一个生产者?有时候,您确实做到了。

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

    10-11 08:21