Javascript 基于另一个观察值的过去值过滤一个观察值
因此,我有两个可观察对象Javascript 基于另一个观察值的过去值过滤一个观察值,javascript,rxjs,reactive-programming,Javascript,Rxjs,Reactive Programming,因此,我有两个可观察对象单击$和聚焦$。只有在过去500毫秒内没有任何焦点事件时,我才希望点击通过 我试过滑雪。但我不知道该往里面放什么 click$.skipWhile(/* No focus$ events in the past 500ms*/).subscribe() 请给我指出正确的方向。您应该能够根据焦点事件合成一个可观察对象,从而完成您想要做的事情。像这样: const focusedClick$ = focus$ // Switch to the click observa
单击$
和聚焦$
。只有在过去500毫秒内没有任何焦点事件时,我才希望点击通过
我试过滑雪。但我不知道该往里面放什么
click$.skipWhile(/* No focus$ events in the past 500ms*/).subscribe()
请给我指出正确的方向。您应该能够根据焦点事件合成一个可观察对象,从而完成您想要做的事情。像这样:
const focusedClick$ = focus$
// Switch to the click observable, but only after the specified
// duration has elapsed:
.switchMap(() => Observable.timer(500).ignoreElements().concat(click$));
如果在某种程度上可能有一个单击事件而没有前面的焦点事件,则可以使用startWith
操作符解决该问题:
const focusedClick$ = focus$
// Map the focus event to a duration:
.mapTo(500)
// Start the observable chain with a duration of zero, so click
// events don't have to be preceded by focus events:
.startWith(0)
// Switch to the click observable, but only after the specified
// duration has elapsed:
.switchMap(duration => Observable.timer(duration).ignoreElements().concat(click$));
但是如果focus$observable是空的呢?@cartant谢谢你的回答。但就像盖威克提到的。如果没有焦点事件呢?这将不起作用。我添加了另一个解决方案,该解决方案不需要在单击事件之前进行焦点事件。谢谢,我将接受此答案。但是我们不能基于点击$observable做这件事有什么原因吗?我认为这是最简单的方法,仅此而已。这些解决方案仅在需要事件时订阅
单击$
。我认为这比总是观察点击和忽略一些而不是其他更简单。稍后我会考虑一下——也许吧——看看是否有一个基于点击$
的解决方案值得分享。