Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于另一个观察值的过去值过滤一个观察值_Javascript_Rxjs_Reactive Programming - Fatal编程技术网

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做这件事有什么原因吗?我认为这是最简单的方法,仅此而已。这些解决方案仅在需要事件时订阅
单击$
。我认为这比总是观察点击和忽略一些而不是其他更简单。稍后我会考虑一下——也许吧——看看是否有一个基于
点击$
的解决方案值得分享。