2016-11-03 35 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