1. 前言:Observable
Rx.Observable: 可观察对象。简单理解就是一个可以被subscribe
的对象,它作为数据源会不断的通过next
产生新的数据。
举个例子:
- 当前Observable是一个计数器
- 每次的
next
数据加1 - 订阅该Observable即可得到当前的计数
Rx.Observable.create(observer => {
observer.next(1);
observer.next(2);
observer.next(3);
}).subscribe(count => {console.log(count)})
2. Cold 和 Hot
Rxjs中把观察者(Observable
)区分为热观察者(Hot Observable
)以及冷观察者(Cold Observable
)。
定义:
- Cold:订阅后可以<u>接收到当前可观察对象产生的所有数据</u>。
- Hot:订阅后仅可以<u>接收到订阅时间点之后产生的数据</u>。
理解:
将Observable看作一个Event Emiter
,它要做的是将新数据往外抛,那么实际上它还需要一个产生数据的Producer
。我们理解Cold/Hot观察者就可以理解为:
- Cold:Data Producer在observable内部,每次订阅后会new Producer,所有数据都会重新发一次。
- Hot:Data Producer是在Observable外部,每次订阅后Producer不受影响,继续保持当前状态产生数据。
// cold
Rx.Observable.create(observer => {
const producer = new Producer()
...
})
// hot
const producer = new Producer()
Rx.Observable.create(observer => {
...
})
形象的比喻:
把Observable看作一个音乐播放器:
- Cold:给每个听歌的人发CD,每个人都可以听完所有歌。
- Hot:只有一张CD大家一起听,先来的人听得多,后来的人只能听剩下的。
3. 使用场景
实际上大部分时候我们都是使用的cold observable,每个订阅者都可以完整的接收到观察对象的数据,当然也有使用到Hot的情况,同样以计数器来说:
计数器在一开始就启动
- 需要查看整个增长动态变化情况,长期保持订阅 => Cold
- 仅需要查看当前时间段的增长,随时可能取消订阅 => Hot
以上是对于Cold和Hot Observable的一些个人总结,有不对的地方欢迎指正。谢谢。