combineLatest
只是說明是是什么意思,具體的API用法,請參考官方文檔
白話解釋
只要是子流有變化就來一發(fā)
案例
兩個流:A :每隔4秒發(fā)射出一個值, B: 每隔2秒發(fā)出一個值 (會有同一時間發(fā)出一個值)
A: -------0-------1------2------3-----4
B: ---0--1---2---3--4
從圖上看,A0和B1、A1和B3同時發(fā)出
var A = Rx.Observable.interval(4000).take(5);
var B = Rx.Observable.interval(2000).take(5);
console.log( new Date().toLocaleString( )) // 開始訂閱的時間
const combined = Rx.Observable
.combineLatest(A,B)
.subscribe( x => {
console.log( new Date().toLocaleString( ))
console.log(x)
})
結(jié)果:
"2017/3/3 下午3:34:53"
"2017/3/3 下午3:34:57" // 4s 過后,A發(fā)出值0, B剛好發(fā)出 1 ,雖然會出現(xiàn)[0,0],但是這個點的最終結(jié)果是[0,1]
[0, 0]
"2017/3/3 下午3:34:57"
[0, 1]
"2017/3/3 下午3:34:59"
[0, 2]
"2017/3/3 下午3:35:01" // 注意這邊,A 剛好發(fā)出 1, B 剛好發(fā)出3 ,雖然會出現(xiàn)[1,2], 但是這個點的最終事件是 [1,3]
[1, 2]
"2017/3/3 下午3:35:01"
[1, 3]
"2017/3/3 下午3:35:03"
[1, 4]
"2017/3/3 下午3:35:05"
[2, 4]
"2017/3/3 下午3:35:09"
[3, 4]
"2017/3/3 下午3:35:13"
[4, 4]
兩個流:A :每隔5秒發(fā)射出一個值, B: 每隔2秒發(fā)出一個值 (會有同一時間發(fā)出一個值)
A: ---------0--------1--------2--------3--------4---|---
B: ---0--1---2--3--4---|--
從時間軸上可以看出,A1和B4 是同時發(fā)出的。
var A = Rx.Observable.interval(5000).take(5);
var B = Rx.Observable.interval(2000).take(5);
console.log( new Date().toLocaleString( ))
const combined = Rx.Observable
.combineLatest(A,B)
.subscribe( x => {
console.log( new Date().toLocaleString( ))
console.log(x)
})
結(jié)果:
"2017/3/3 下午3:51:20"
"2017/3/3 下午3:51:25"
[0, 1]
"2017/3/3 下午3:51:26"
[0, 2]
"2017/3/3 下午3:51:28"
[0, 3]
"2017/3/3 下午3:51:30" // 注意這邊
[1, 3]
"2017/3/3 下午3:51:30"
[1, 4]
"2017/3/3 下午3:51:35"
[2, 4]
"2017/3/3 下午3:51:40"
[3, 4]
"2017/3/3 下午3:51:45"
[4, 4]