如何在RXJS中不早于指定超时发出事件?

如何在RXJS中不早于指定超时发出事件?,rxjs,system.reactive,Rxjs,System.reactive,我想在视觉效果消失后发射事件。视觉效果持续5秒。 此代码有效,但我认为有更好的解决方案: Observable.combineLatest(observable1, Observable.of('hold').delay(5000)).subscribe(() => { alert('ok'); }); 触发observable1时应触发此事件,但不得早于5秒。(如果observable1在6秒后触发,则此事件应在6秒后触发。如果observable1在3秒后触发,则此事件应在5

我想在视觉效果消失后发射事件。视觉效果持续5秒。 此代码有效,但我认为有更好的解决方案:

Observable.combineLatest(observable1, Observable.of('hold').delay(5000)).subscribe(() => {
    alert('ok');
});
触发observable1时应触发此事件,但不得早于5秒。(如果observable1在6秒后触发,则此事件应在6秒后触发。如果observable1在3秒后触发,则此事件应在5秒后触发)

如何


您所描述的看起来像是您需要的,仅当其源发射时才发射:

Observable
  .of('hold')
  .delay(5000)
  .withLatestFrom(observable1, (...values) => values[1])
  .subscribe(console.log);
只有延迟的
'hold'
字符串控制此运算符何时从
可观察1发出最新值。操作员在其源代码和
observed1
发出之前不会发出任何东西,因此即使
observed1
6s
之后发出,您也会在
6s
之后收到第一项。当它以另一种方式出现并且
observative1
更早地发出时,它将等待
的'hold'
字符串

如果您对
observative1
中的值不感兴趣,可以忽略投影函数,只使用:

...
.withLatestFrom(observable1)
...

我为不是RxJS编码员而道歉——我用C#编码。下面是如何在C#中执行此操作:

你会得到:

2017/06/30 17:08:49 2017/06/30 17:08:55 2017/06/30 17:09:27 2017/06/30 17:09:37 你会得到:

2017/06/30 17:08:49 2017/06/30 17:08:55 2017/06/30 17:09:27 2017/06/30 17:09:37 2017/06/30 17:09:27 2017/06/30 17:09:37 如果这是你想要的,请告诉我

是否有人可以编辑我的答案,将我的代码更改为RxJS?

Rx.js运算符仅在指定时间过后才从源中发出最新的可观察值

Observable1.debounceTime(5000).subscribe(() => { alert('ok') } );

我更新了问题。触发observable1时应触发此事件,但不得早于5秒。在您的情况下,如果observable1在6秒后触发,则此事件将在11秒后触发。在这种情况下我需要6秒钟。 2017/06/30 17:08:49 2017/06/30 17:08:55
Thread.Sleep(10000); // 10 seconds
observable1.OnNext(42);
2017/06/30 17:09:27 2017/06/30 17:09:37
Observable1.debounceTime(5000).subscribe(() => { alert('ok') } );
observable1.combineLatest(Observable.timer(5000))
    subscribe(([result]) => {
        alert('ok');
    });