在Reactive Framework中滑动窗口/缓冲区

时间:2013-10-25 23:13:38

标签: javascript system.reactive rxjs

我想创建一个输入事件的可变长度窗口/缓冲区,它会在收到其他事件时延长。

这是为了实现“当您键入时搜索”功能。我想捕获点击,但为了不给服务器带来压力,我想明智地进行服务调用。

我想到的逻辑是缓冲击键,从第一个键开始,直到键加1秒延迟。因此,如果用户仍在键入(即以<1秒的频率敲击键盘),我们将不会呼叫后侧服务。然而,一旦他们停止输入1秒钟,就会打电话。

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是Rx的Throttle功能。

在C#和Javascript中完成你想要的东西(即使javascript肯定是你需要的,用c#和rxjs标记的问题):

Rxjs中,您会在here中找到一个很棒的教程:

$(document).ready(function(){
    $('#myInput')
        .toObservable("keyup")
        .Select(function(){ return $('#myInput').val(); })
        .Throttle(500)
        .Subscribe(function(text){ console.log("fire up ajax call"); });
});

Rx.Net中,您会在here中找到一个有趣的示例:

SearchTextChangedObservable = Observable.FromEventPattern<TextChangedEventArgs>(this.textBox, "TextChanged");
_currentSubscription = SearchTextChangedObservable.Throttle(TimeSpan.FromSeconds(.5)).ObserveOnDispatcher().Subscribe(e => this.ListItems.Add(this.textBox.Text));

希望这有帮助。