rxjs 熱流冷流
冷流
let count = 1;
let obs = Observable.create(observer => {
observer.next(count++);
});
let sub1 = obs.subscribe(res => console.log('sub1', res)); // sub1 1
let sub2 = obs.subscribe(res => console.log('sub2', res)); // sub2 2
訂閱一次流的數據就重新產生一次
半熱
let count2 = 1;
let obs1 = Observable.create(observer => {
observer.next(count2++);
// setTimeout(() => { observer.next(count2++); })
})
.pipe(map(t => {console.log(t); return t}))
// .publish();
.pipe(publish());
let sub3 = obs1.subscribe(res => console.log('sub3', res)); // sub3 1
let sub4 = obs1.subscribe(res => console.log('sub4', res)); // sub4 1
obs1.connect();
let sub5 = obs1.subscribe(res => console.log('sub5', res)); // 沒有數據
connect時流產生一次,在connect之前的訂閱者都是可以接收到產生的數據,之後的卻不能
取消setTimeout時可以sub5是可以接收到值
熱流
let count3 = 1;
let obs2 = Observable.create(observer => {
observer.next(count3++);
observer.next(count3++);
setTimeout(() => { observer.next(count3++); }, 1000);
// setTimeout(() => { observer.next(count3++); }, 2000);
})
// .publish();
.pipe(publish())
.pipe(refCount())
let sub6 = obs2.subscribe(res => console.log('sub6', res)); // sub3 1
let sub7 = obs2.subscribe(res => console.log('sub7', res)); // sub4 1
/*
sub6 1 ,sub6 2, sub6 3, sub7 3
*/
這個就比較奇怪了,感覺像是sub6去激活了數據的產生
直觀的想setTimeout爲異步console.log值應該是
sub6 1 ,sub6 2,sub7 2, sub6 3, sub7 3
但是卻爲
sub6 1 ,sub6 2, sub6 3, sub7 3
很奇怪沒想明白