2016-08-18 5 views
0

私は反応的な拡張機能で新しくなっていますので、私の無知を許してください。私はオブジェクトを返す2つの観察可能なオブジェクトobj1obj2を持っています。特定の時間窓T(私が推測するバッファ)では、最も希薄なアイテムシーケンスをアップサンプリングしたいと思う。 を参照してください。アップサンプリングされた手順で 別のものに基づいて観測可能なRxをサンプルアップ

  Time of returned objects 
     obj1 t1 t2 t3 t4 t5 t6 ... 
     obj2 t1   t2  t3 ... 
    os_obj2 t1 t1 t2 t2 t2 t3 ... 
time_window <-----T-----><-----T-----> 

は、我々は obj2obj1の項目が存在する同じ場所(時間)内の項目を返して置きます。

我々は、特定のobj1アイテムの時間に複製する必要がありますobj2項目がobj2項目は、特定のobj1アイテムの時間に近いあるに依存するものを選択します。

これを実現する方法(機能の可能性または機能のパイプライン)をお勧めしますか?

ありがとうございました。

+3

Rxは、一般的にアイテムを扱うサンプルする。あなたは、予測ストリームのいくつかの並べ替えを設定しない限り、それは本当に、将来についての予測をすることはできません。あなたのダイアグラムのt3で、この関数は、遅い観測値が変化しようとしていることをどのように知るべきですか? – Shlomo

+0

@Shlomoが興味を持ってくれてありがとう。私は私の質問に少し変更を加えました。私はこれをやろうとしていると思いますが、今はバッファが可能です。私は正しい?コメントのご提案は高く評価されます。 – Darkmoor

+2

これは、あなたが時間旅行の何らかの形をしたいように思えます。将来的に価値を生み出すことはできません。 – Enigmativity

答えて

0

EDITこれまでに他の観測物によって放出されなかったアイテムを放出したいと思ったところです。将来を予見する必要があるため、これを達成することはできません。

obj2が予測可能なアイテムを定期的に放出する場合は、何かできます。 obj2はそれらのアイテムを半期早く放出するので、最新のアイテムはobj2から使用でき、将来のアイテムを予測する必要はありません。

次のサンプルは、最新のアイテムをobj2から、obj1の放出時刻に放出します。最も簡単な方法はObservable.withLatestFromです。

var obj1 = Rx.Observable.interval(500).map(x => "obj1." + x).take(10); 
 
var obj2 = Rx.Observable.interval(300).map(x => "obj2." + x).take(10); 
 

 
obj2.withLatestFrom(obj1).pluck(1).subscribe(x => console.log(x));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-beta.11/Rx.umd.js"></script>

PS:最初に私はsampleを使用することができます思ったが、それはオーバーサンプリングのために私のために動作しませんでした。

0

観測可能なストリームの各値には、表示される時間と値の2つの要素があります。それでは、少し自分の概略図を変更してみましょう:

Timeline 0--1--2--3--4--5--6--7--8... 
XObserve x0-x1-x2-x3-x4-x5-x6-x7-x8... 
YObserve y0-------y1-------y2------... 

だから我々は1が(簡単にするために、のは、タイムラインは第2のスケールであるとしましょう)ごとに第2の値を発する2つの観測を持って、他の値は3秒ごとを発します。すべてのことを考えれば、第3のストリームZObserveはアップサンプリング技術を使用してXストリームのレートでYストリームの値を生成するようにしたいですか?私はそれが何であるか見当がつかないので、あなたがT8ZObserveの値を見ることができるように

Timeline 0--1--2--3--4--5--6--7--8-... 
XObserve x0-x1-x2-x3-x4-x5-x6-x7-x8... 
YObserve y0-------y1-------y2------... 
ZObserve y0-y0-y1-y1-y1-y2-y2-y2-??... 

??です。私はまた、T2T5でどうやってYストリームから次の値が来るのか予測できなかったのを見ていません。もしそれらがどんなものになるかについての信頼できるルールがあれば、それに応じてコード化し、新しいストリームPredictedYを生成して、@ストリームが生成するように@Tamasが提案するようにWithLatestFromを使用することができます。

0

私はオペレータCombineLatestを使用することを提案し、おそらく彼らが来るとしてその後

関連する問題