5

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 ライブデモ

bar$ストリームの変更中にサブスクリプションを維持するにはどうすればよいですか? bar$ を変更した後、サブスクリプションを破棄して別のサブスクリプションを設定する必要がありますか?

4

1 に答える 1

7

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

于 2016-04-26T13:16:53.893 に答える