rxjs之combineLatest

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]

你可能感兴趣的:(rxjs之combineLatest)