2017-01-21 7 views
3

私はRXにとって非常に新しいです。ここで私が解決しようとしている問題の単純なモデルです。それは簡単に見えますが、私はそれを解決するために適切な演算子を見つける(または他の方法でストリームを操作する)のが苦労しています。RxJS:1つのストリームのレートでイベントを発生させ、他のストリームの最新の値を使用する2つのストリームを結合する方法

したがって、2つのストリームがあるとします。一つは頻繁に値を出す。もう一方ははるかに少ないです。 2番目の観測値が値を出し、その時点で他の観測値によって放出された最新の値をとり、それを使って何かを行うたびに、私たちは望みます。

例えば非稼働:

let stream1 = Rx.Observable 
    .interval(100); 

let stream2 = Rx.Observable 
    .interval(2000) 
    .combineLatest(stream1, (stream2Value, stream1Value) => stream1Value) 
    .do((stream1Value) => console.log('value:', stream1Value)); 

stream2.subscribe(); 

上記のスニペットの問題は、それがSTREAM2から放出された最初の値まで待機し、その後STREAM1の周波数でイベントのストリームを放出開始することです。私が望むのは、stream2のレートでイベントを発生させるストリームを取得することですが、起動されたストリームstream2によってstream1によって放出された最新の値を放出します。 Stream2が動作するときにstream1が必要なように聞こえるので、stream2が起動したときに最後の値にアクセスできるようになります...しかしもっと簡単な解決策がありますか?

答えて

4

あなたはそれを行うためにwithLatestFromを使用することができます。

let stream1 = Rx.Observable 
 
    .interval(100); 
 

 
let stream2 = Rx.Observable 
 
    .interval(2000) 
 
    .withLatestFrom(stream1, (stream2Value, stream1Value) => stream1Value) 
 
    .do((stream1Value) => console.log("value:", stream1Value)); 
 

 
stream2.subscribe();
<script src="https://npmcdn.com/@reactivex/[email protected]/dist/global/Rx.min.js"></script>

はまた、あなたのユースケースに応じて、あなたはauditTimeオペレータ便利を見つけるかもしれません。

+0

ヤス!ちょうど私が探していたもの!どうもありがとうございます! – azangru

関連する問題