在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);
如何在更改bar$
流时保留订阅?
在更改条形码后,我是否已经处理了订阅并设置了另一个订阅?
答案 0 :(得分:5)
Rx中的一般模式是用值流(即可观察的)替换状态变异。这里,bar $应该被建模为Observable<Observable<T>>
(即T类型的值流),而不是重新分配bar $。然后可以将其“展平”为值流(在这种情况下,使用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));