2016-11-03 3 views
0

基本的に私は2つのサブスクリプションを持っています。RxJs。最近発射された場合、他の観測可能なものを待つ方法

まず一つは、それはいくつかのデータをロードし、表示する、非常に簡単です:私はこの問題を

observableTwo$.subscribe(event => { 
    transformDisplayedData(event); 
}); 

observableOne$.switchMap(event => { 
    return loadData(event); 
}).subscribe(data => { 
    displayData(data); 
}); 

2つ目は、変換データを表示し、変換が一度だけ行われるべきです2番目のイベントが最初に開始されると、変換が失われます。そして私は再適用することはできません、それは一度の行動です。

observableOne$が最近発射された場合、変換を延期する方法はありますか?そのようになります。

時系列:私はfiddleデモで作成した

One  : -a----------a-----> 
Two  : -----b------b-----> 
Display : ---a----------a---> // lag is due to async data loading 
Transform: -----b--------b---> 

EDIT。実際の時間シーケンスは次のように書くことができる:

PageClick  : -x----------x-----> 
HighlightClick : -----x------x-----> 
DataRender  : ---x----------x---> 
DataHighlight : -----x------x-----> 

PageClickとHighlightClickが一緒にデータが強調表示され、第二は、後でレンダリング。それは、イベントstart loadingend loadingパッシングされて中間ストリームを、導入を介して行うことができます興味を持って誰か場合

PageClick  : -x----------x-----> 
HighlightClick : -----x------x-----> 
DataRender  : ---x----------x---> 
DataHighlight : -----x--------x---> 
+0

'observableOne $'の直後にトリガされたことを知っている場合、 'observableTwo $'をトリガする方法と、なぜ、いつトリガするのですか? 'throttle()'や 'debounce()'のような演算子がありますが、あなたのコードが何をしているのか分からないときには助言を与えるのは難しいです。 – martin

+0

@Martin、それはシーケンス図でより明確ですか? –

+0

'displayDisplayedData(event);'を 'displayData(data);の直前に置くことができないのはなぜですか? – martin

答えて

0

:しかし、私は強調し、したがって、所望の時間系列を延期したいと思います。詳細については、こちらを参照してくださいquestion

関連する問題