2016-11-03 71 views
0

基本上我有兩個訂閱,不時發生事件。RxJs。如何等待其他可觀察的,如果它最近發射

第一個是非常簡單,它加載並顯示一些數據:

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

第二個變換顯示的數據,而改造的,應做一次:

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

我的問題面臨的是,如果第一個事件在第一個事件之後立即被解僱,那麼變革就失去我不能重新申請,這是一次行動。

最近有沒有辦法推遲轉換observableOne$

時間序列看起來像這樣:

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

編輯

我創建了一個fiddle與示範。實際的時間順序可以這樣寫:

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

當PageClick和HighlightClick聚集在一起時,數據突出顯示,第二次渲染。但是,我想推遲突出,因此需要的時間序列:

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

如果您知道在observableOne $後立即觸發了'observableTwo $',並且您知道它不應該如何,爲什麼以及何時觸發?有''throttle'或'debounce()'等操作符,但當你的代碼不明顯時,很難給出任何建議。 – martin

+0

@Martin,序列圖更清晰嗎? –

+0

爲什麼不能在displayData(data)之前放置'transformDisplayedData(event);'? – martin

回答

0

如果有人感興趣,它可以通過引入中間流,通過這些事件start loadingend loading正在傳遞來完成。有關更多詳細信息,請參閱question