首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RxJS combineLatest混淆

RxJS combineLatest混淆
EN

Stack Overflow用户
提问于 2017-04-26 04:10:11
回答 1查看 1.6K关注 0票数 1

我以为我理解combineLatest,但考虑到我的输出-我不理解它。我认为,在combineLatest中,所有可观测值都会在任何可观测值发出时发出它们的最后值。

(注:我只是采取了(5)限制我的控制台输出)

所以,考虑到这个微不足道的例子-

代码语言:javascript
复制
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}
  `)
})

我以为能看到

代码语言:javascript
复制
"
      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

但我得到了

代码语言:javascript
复制
"
      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

有点困惑。你的想法,为什么我没有看到什么,我的期望将是可怕的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-26 04:28:16

http://reactivex.io/documentation/operators/combinelatest.html CombineLatest在任何源观测者发出一个项目时都会发出一个项目。

(只要每个源可观测数据至少发出一个项) <<==

int3不会在3000 is之前发出任何项,因此Rx将等待它,然后用最新的项调用onNext

可能的解决方案:尝试使用计时器(在0发出第一个值,然后每n次发出一次)。

代码语言:javascript
复制
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}
  `)
})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43624880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档