2016-04-17 17 views
1

私はこの演算子を完全に理解していません。 groupJoinの理解

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/groupjoin.md

は、どのようにその部分を理解する:

は、重複期間に基づいて2つのシーケンスの要素、およびグループの結果を相関します。

leftDurationSelector(機能):重なりを決定するために使用される、左側の観察可能なシーケンスの各要素の持続時間(観測可能なシーケンスとして表現される)を選択する関数。 rightDurationSelector(Function):右の観測可能なシーケンスの各要素の継続時間(観測可能なシーケンスとして表現されます)を選択して、重なりを決定するために使用する関数です。

(観測可能な)左列の要素と重複右列の要素で観察シーケンス:第四引数から

ここで第2引数と第3引数はこのようになりますか?タイマー(0)は何が良いの? 0秒後にタイマー(0)が値0を返して完了することを理解します。だから何?

var xs = Rx.Observable.interval(100) 
    .map(function (x) { return 'first' + x; }); 

var ys = Rx.Observable.interval(100) 
    .map(function (x) { return 'second' + x; }); 

var source = xs.groupJoin(
    ys, 

    function() { return Rx.Observable.timer(0); }, 
    function() { return Rx.Observable.timer(0); }, 
    function (x, yy) { 
     return yy.select(function (y) { 
      return x + y; 
     }) 
    }).mergeAll().take(5); 

var subscription = source.subscribe(
    function (x) { 
     console.log('Next: ' + x); 
    }, 
    function (err) { 
     console.log('Error: ' + err); 
    }, 
    function() { 
     console.log('Completed'); 
    }); 

あなたは説明の源泉がわかりましたか?

答えて

1

ここでは、groupJoinをよりよく理解するために検討する必要がある情報源を示します。好奇心で、この演算子を使って達成しようとしていることは何ですか?同じことをする別の方法があるかもしれません。私はまだgroupJoinの実用的な面白い使用に来ていない。

私はあなたがためにこれらの資源を見直し(とjoinを理解することから始め)、そして過ごすお勧めします何が起こっているのかを理解するために大理石のある時間。

公式のドキュメントの例については、timer(0)は基本的に1つのティックの期間セレクタを与えます。デュレーションセレクタは信号としてのみ機能し、その値は出力とは無関係です。期間セレクタが値を出すか、終了すると、何かが起こります(両方のストリームからグループ化された値が放出されます)。彼らはどちらも終了しない値を放出しませんが、物事も起こります(両方のストリームからの値のグループ化)。

渡されたセレクタ関数は、グループ化された値を受け取り、そこから他の値を計算します。 groupJoinを使用すると、そのセレクタは最初のソースから値を受け取り、2番目のソースからすべての関連値をグループ化するオブザーバブルを取得します。

+0

私はちょうど私がそれを思うので、これを理解しよう後でRxJSでコードを記述するときに役立ちます。後でこれらのリソースをチェックします –

0

ユーザー3743222が回答を投稿した後、私はそのページから理解するのに時間がかかりましたが、私は常にreactivexを確認しましたが、この機能のために矢印が左から右に向かってわかりにくいです。

窓がありました。そして、それらの矢印は窓を表していることが分かります。

第2および第3のパラメータは、ウィンドウ幅である:ウィンドウ幅上記

function() { return Rx.Observable.timer(500); } 

例えば500ミリ秒(このケースでは、時間単位の幅を測定することができると仮定して)です。

私はより多くの窓のように私を探しグラフィック塗装:だから私のグラフから、我々は黒いウィンドウが緑の窓と交差し、そのイベントは、関数によって結合された例を参照することができます

enter image description here

を第4パラメータ。

緑色と赤色と同じです。

最初のストリームウィンドウから複数のイベントが2番目のストリームと交差する場合のように、私は他のケースについては調査しませんでしたが、少なくともそれがどのように機能するか考えています。予期せぬ事態。

は、視覚的にも、彼らは私が窓がある場合を意味し、存在しない探しているので、私はそれが持つ想像し、0のさらなる調査のウィンドウ幅を必要とする幅> 0