Chr*_*oph 8 throttling system.reactive rxjs
我认为RxJS应该完全适合压制多次按键点击2秒.但是,我正在努力实施.
var $button = $('#myButton').button();
$button
.toObservable("click")
//.Throttle(2000) // Wouldn't fire the first event instantly :-(
.Subscribe(function(){ alert('clicked'); });
Run Code Online (Sandbox Code Playgroud)
为方便起见,我已经创建了一个jsFiddle.你需要向下滚动这个小提琴,因为我只是粘贴Rx,因为我找不到CDN.
我将Sergeys的答案转换为JavaScript,并认为这应该是最后的方法.
var $button = $('#myButton').button();
$button
.toObservable("click")
.Take(1)
.Merge(Rx.Observable.Empty().Delay(2000))
.Repeat()
.Subscribe(function(){ console.log('clicked'); }
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这个解决方案实际上更好,因为它不依赖于副作用,这使得它在可组合性方面更加出色.
正如谢尔盖指出的那样,你甚至可以进一步实施自己的组合器,如下所示:
Rx.Observable.prototype.OneInTime = function(delay){
return this
.Take(1)
.Merge(Rx.Observable.Empty().Delay(delay))
.Repeat();
};
Run Code Online (Sandbox Code Playgroud)
所以我们上面的例子可以简化为:
var $button = $('#myButton').button();
$button
.toObservable("click")
.OneInTime(2000)
.Subscribe(function(){ console.log('clicked'); });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |