【发布时间】:2015-11-18 08:34:37
【问题描述】:
我查看了以下 SO 问题: What are the Hot and Cold observables?
总结一下:
- 当一个冷的 observable 有一个观察者来消费它们时,它会发出它的值,即观察者接收到的值的顺序与订阅时间无关。所有观察者都将使用相同的值序列。
- hot observable 独立于其订阅发出值,即观察者收到的值是订阅时间的函数。
然而,我觉得热与冷仍然是混淆的根源。所以这是我的问题:
-
默认情况下所有 rx observables 都是冷的吗(主题除外)?
我经常读到事件是热可观察对象的典型隐喻,但我也读到
Rx.fromEvent(input, 'click')是冷可观察对象(?)。 -
是否有/有哪些 Rx 操作符可以将冷的 observables 变成热的 observables(
publish和share除外)?例如,它如何与 Rx 运算符
withLatestFrom一起工作?让cold$成为一个冷的可观察对象,它已经在某个地方被订阅了。sth$.withLatestFrom(cold$,...)会成为热门观察者吗?或者如果我订阅
sth1$.withLatestFrom(cold$,...), sth2$.withLatestFrom(cold$,...)并订阅sth1和sth2,我会看到sth的值相同吗? 我认为
Rx.fromEvent会创建冷的可观察对象,但事实并非如此,正如其中一个答案所述。但是,我仍然对这种行为感到困惑:https://codepen.io/anon/pen/NqQMJR?editors=101。不同的订阅从同一个 observable 获得不同的值。click事件不是共享了吗?
【问题讨论】:
-
在冷可观察对象上的“所有观察者将使用相同的值序列”的陈述是不正确的。很多时候确实如此,但即使是改变数组中的一个元素并将其转换为可观察对象的简单情况也意味着值会发生变化。我同样可以创建一个随机数生成器 observable,它会很冷,但很少重复数字。
-
没错。实际上,这正是链接代码笔中的特色以及当时谁产生了我的问题。希望我提供的答案更清楚地说明订阅会发生什么。
标签: javascript angular rxjs reactive-programming rxjs5