没有缓冲的节流

时间:2016-01-01 01:03:06

标签: javascript rxjs

我有一些我想要扼杀的祝酒词。我尝试使用缓冲区,然后我在数组中收到一堆消息,而我真正喜欢的是消息只是留在流中直到我要求它们。我最终做的是用间隔流压缩我的消息流

var messageStream = Rx.Observable.FromEvent(..., 'click');
var intervalStream = Rx.Observable.interval(5000);
messageStream.Zip(intervalStream, (x,_)=>x).subscribe(showToast(x));

有更优雅的方法吗?

2 个答案:

答案 0 :(得分:2)

看看controlled。它使您可以排队值,等待.request(x) x值。要谨慎使用,因为这意味着内存将用于缓冲值,内存不是无限的。这也可能是一个很好的阅读:backpressure

答案 1 :(得分:0)

这是一种使用缓冲区的方法,然后是flatMap来展开数组:

var messageStream = Rx.Observable.FromEvent(..., 'click');
var intervalStream = Rx.Observable.interval(5000);
messageStream
    .buffer(intervalStream)
    .flatMap( function (x) {
        return Rx.Observable.from(x)
    })
    .subscribe( function  (x) { 
        showToast(x) 
    })

Example here on jsfiddle.