gpt4 book ai didi

javascript - 如何缓冲最新值,直到另一个值通过 rxjs 到达另一个序列?

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:58 25 4
gpt4 key购买 nike

我正在尝试在我的项目中使用 rxjs。我有以下序列,我期望的是第一个序列只会在另一个序列中的值到达后才被处理,并且只会保留第一个序列中的最新值。有什么建议吗?

s1$ |a---b----c-

s2$ |------o----

预期结果:

s3$ |------b--c-

最佳答案

我会合并 sample()这已经与您需要的非常相似并且skipUntil() .

const start = Scheduler.async.now();
const trigger = new Subject();

const source = Observable
.timer(0, 1000)
.share();

Observable.merge(source.sample(trigger).take(1), source.skipUntil(trigger))
.subscribe(val => console.log(Scheduler.async.now() - start, val));

setTimeout(() => {
trigger.next();
}, 2500);

这将输出以 2 开头的数字。

source  0-----1-----2-----3-----4
trigger ---------------X---------
output ---------------2--3-----4

带有时间戳的控制台输出:

2535 2
3021 3
4024 4
5028 5

或者,您可以使用 switchMap()ReplaySubject,但它可能不像前面的示例那么明显,您需要两个 Subject。

const start = Scheduler.async.now();
const trigger = new Subject();

const source = Observable
.timer(0, 1000)
.share();

const replayedSubject = new ReplaySubject(1);
source.subscribe(replayedSubject);

trigger
.switchMap(() => replayedSubject)
.subscribe(val => console.log(Scheduler.async.now() - start, val));

setTimeout(() => {
trigger.next();
}, 2500);

输出完全一样。

关于javascript - 如何缓冲最新值,直到另一个值通过 rxjs 到达另一个序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43976982/

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