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

在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 $stream时如何保留订阅?
在更改条形码$后,我是否已经处理了订阅并设置了另一个订阅?

解决方法:

Rx中的一般模式是用值流(即可观察的)替换状态变异.这里,bar $应该被建模为Observable< Observable< T>>而不是重新分配bar $. (即,类型为T的值的流的流).然后可以将其“展平”为值流(在这种情况下,使用开关).

例如:

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

上一篇:Hystrix是个什么玩意儿


下一篇:c# – 嵌套的Observable在Wait()上挂起