combineLatest
只是说明是是什么意思,具体的API用法,请参考官方文档
白话解释
只要是子流有变化就来一发
案例
两个流:A :每隔4秒发射出一个值, B: 每隔2秒发出一个值 (会有同一时间发出一个值)
A: -------0-------1------2------3-----4
B: ---0--1---2---3--4
从图上看,A0和B1、A1和B3同时发出
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)
})
结果:
"2017/3/3 下午3:34:53"
"2017/3/3 下午3:34:57" // 4s 过后,A发出值0, B刚好发出 1 ,虽然会出现[0,0],但是这个点的最终结果是[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 刚好发出 1, B 刚好发出3 ,虽然会出现[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秒发射出一个值, B: 每隔2秒发出一个值 (会有同一时间发出一个值)
A: ---------0--------1--------2--------3--------4---|---
B: ---0--1---2--3--4---|--
从时间轴上可以看出,A1和B4 是同时发出的。
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)
})
结果:
"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]