我认为RxJS应该非常适合2秒钟内禁止双击按钮。但是,我正在努力执行。

var $button = $('#myButton').button();
$button
    .toObservable("click")
    //.Throttle(2000) // Wouldn't fire the first event instantly :-(
    .Subscribe(function(){ alert('clicked'); });

为了方便起见,我已经创建了一个jsFiddle。您需要在此 fiddle 中向下滚动,因为我将Rx粘贴到了里面,因为找不到CDN。

http://jsfiddle.net/cburgdorf/mUMFA/2/

最佳答案

我将Sergeys的答案转换为JavaScript,并认为这应该是最终的解决方法。

var $button = $('#myButton').button();
    $button
        .toObservable("click")
        .Take(1)
        .Merge(Rx.Observable.Empty().Delay(2000))
        .Repeat()
        .Subscribe(function(){ console.log('clicked'); }

根据我的理解,该解决方案实际上更好,因为它不依赖副作用,而副作用在可组合性方面甚至更好。

正如Sergey指出的那样,您甚至可以进一步实现自己的组合器,如下所示:
Rx.Observable.prototype.OneInTime = function(delay){
 return this
        .Take(1)
        .Merge(Rx.Observable.Empty().Delay(delay))
        .Repeat();
};

因此,我们上面的示例可以简化为:
var $button = $('#myButton').button();
    $button
        .toObservable("click")
        .OneInTime(2000)
        .Subscribe(function(){ console.log('clicked'); });

关于system.reactive - 如何在2秒钟内第一次发生然后发生压制事件(RxJS),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5197032/

10-13 05:05