我以为我理解combineLatest,但考虑到我的输出-我不理解它。我认为,在combineLatest中,所有可观测值都会在任何可观测值发出时发出它们的最后值。
(注:我只是采取了(5)限制我的控制台输出)
所以,考虑到这个微不足道的例子-
const int1$ = Rx.Observable.interval(1000).take(5)
const int2$ = Rx.Observable.interval(500).take(5)
const int3$ = Rx.Observable.interval(3000).take(5)
const all$ = Rx.Observable.combineLatest(
int1$, int2$, int3$
)
all$.subscribe(latestValues => {
const [int1, int2, int3] = latestValues;
console.log(`
interval one @ 1000 ${int1},
interval two @ 500 ${int2},
interval three @ 3000 ${int3}
`)
})我以为能看到
"
interval one @ 1000 0,
interval two @ 500 1,
interval three @ 3000 0
"
"
interval one @ 1000 1,
interval two @ 500 2,
interval three @ 3000 0
"
"
interval one @ 1000 1,
interval two @ 500 3,
interval three @ 3000 1
"
"
interval one @ 1000 2,
interval two @ 500 4,
interval three @ 3000 1但我得到了
"
interval one @ 1000 2,
interval two @ 500 4,
interval three @ 3000 0
"
"
interval one @ 1000 3,
interval two @ 500 4,
interval three @ 3000 0
"
"
interval one @ 1000 4,
interval two @ 500 4,
interval three @ 3000 0
"
"
interval one @ 1000 4,
interval two @ 500 4,
interval three @ 3000 1有点困惑。你的想法,为什么我没有看到什么,我的期望将是可怕的!
发布于 2017-04-26 04:28:16
http://reactivex.io/documentation/operators/combinelatest.html CombineLatest在任何源观测者发出一个项目时都会发出一个项目。
(只要每个源可观测数据至少发出一个项) <<==
int3不会在3000 is之前发出任何项,因此Rx将等待它,然后用最新的项调用onNext
可能的解决方案:尝试使用计时器(在0发出第一个值,然后每n次发出一次)。
const int1$ = Rx.Observable.timer(0,1000).take(5)
const int2$ = Rx.Observable.timer(0,500).take(5)
const int3$ = Rx.Observable.timer(0,3000).take(5)
const all$ = Rx.Observable.combineLatest(
int1$, int2$, int3$
)
all$.subscribe(latestValues => {
const [int1, int2, int3] = latestValues;
console.log(`
interval one @ 1000 ${int1},
interval two @ 500 ${int2},
interval three @ 3000 ${int3}
`)
})https://stackoverflow.com/questions/43624880
复制相似问题