如何在RXJS中不早于指定超时发出事件?
我想在视觉效果消失后发射事件。视觉效果持续5秒。 此代码有效,但我认为有更好的解决方案:如何在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
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');
});