gpt4 book ai didi

javascript - RxJS combine最新困惑

转载 作者:行者123 更新时间:2023-11-30 15:21:47 25 4
gpt4 key购买 nike

我以为我理解 combineLatest,但考虑到我的输出 - 我不理解它。我认为使用 combineLatest 时,所有可观察对象都会在任何可观察对象发出时发出它们的最后一个值。

(注意:我只是做了 take(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

有点迷茫。你对为什么我没有看到我期望的东西的想法会很棒!

最佳答案

http://reactivex.io/documentation/operators/combinelatest.html每当任何源 Observables 发射一个项目时,CombineLatest 发射一个项目

(只要每个源 Observables 都发出了至少一项)<<== THIS

int3 在 3000 毫秒之前没有发出任何项目,所以 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}
`)
})

关于javascript - RxJS combine最新困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com