gpt4 book ai didi

javascript - 在保持订阅的同时更改可观察流

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:32:08 27 4
gpt4 key购买 nike

在 RxJS 中,我希望订阅在流中持续存在,即使流发生变化也是如此。下面我使用了一个间隔流来测试行为

//Works because foo$ is unchanged
let foo$ = Rx.Observable.interval(1000);
foo$.subscribe(x => console.log(`foo$: ${x}`));

//Doesn't work because bar$ is changed
let bar$ = Rx.Observable.never();
bar$.subscribe(x => console.log(`bar$: ${x}`))
bar$ = Rx.Observable.interval(1000);

jsbin Live Demo

如何在更改 bar$ 流时保持订阅?在更改 bar$ 后,我是否必须处理订阅并设置另一个订阅?

最佳答案

Rx 中的一般模式是用值流(即可观察值)代替状态突变。在这里,不是重新分配 bar$,而是应该将 bar$ 建模为 Observable<Observable<T>>。 (即 T 类型值流的流)。然后可以将其“扁平化”为值流(在本例中,使用 switch )。

例如:

const bar$ = new Rx.Subject();
bar$.switch().subscribe(x => console.log(`bar$: ${x}`));
bar$.onNext(Rx.Observable.fromArray([1,2,3]));
bar$.onNext(Rx.Observable.interval(1000).take(3));

https://jsbin.com/firoso/edit?js,console,output

关于javascript - 在保持订阅的同时更改可观察流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36845460/

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