2017-04-27 3 views
1

私は2つの観測値を持っていますone$two$;rxjs - 最初のオペレータまで待機するようなものがありますか?

one$は、2回の$が少なくとも1回は起動されたときにのみ起動します。これは基本的にはskipUntilオペレータだと思います。

one$.skipUntil(two$).subscribe() 

しかしさんはtwo$はいないがone$が起動しているとしましょう。私は、ストリームがone$が解雇されたことを記憶し、少なくとも1度は、two$が直ちに起きるような行動をしたい。

乾杯

答えて

1

これは、あなたがそのすべてのソース観測がn番目の項目放出されている場合にのみ、n番目の項目を発するzip()演算子を使用することができようになっています

const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async); 
const two$ = Observable.from(['b1'], Scheduler.async); 

Observable.zip(one$, two$, (v1, v2) => v1) 
    .subscribe(val => console.log(val)); 

を私だけにScheduler.asyncを追加しています非同期動作をシミュレートします(詳細はcombineLatest behaviour in Rxjs 5?を参照してください)

これがコンソールに出力されます:

a1 

これは、one$が1回だけ放出することがわかっている場合にのみ問題ありません。

combineLatest()最終的には、すべてのソースオブザーバブルが少なくとも1つのアイテムを放出する必要があり、セレクタ機能でtwo$を無視できる任意のエミッションで放出することができます。

const one$ = Observable.from(['a1', 'a2', 'a3'], Scheduler.async); 
const two$ = Observable.from(['b1', 'b2'], Scheduler.async); 

Observable.combineLatest(one$, two$.take(1), (v1, v2) => v1) 
    .subscribe(val => console.log(val)); 

我々は、我々は唯一のtwo$から最初の項目をしたいことを知っているが、残りは無視することができます。
これはコンソールに印刷されます:

a1 
a2 
a3 
関連する問題