The bufferTime()
运算符采用三个参数,结合了以下功能bufferTime
and bufferCount
. See http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime.
With .bufferTime(1000, null, 3)
您可以每 1000 毫秒或达到 3 个项目时创建一个缓冲区。然而,这意味着它不能保证每个缓冲区之间有 1000ms 的延迟。
所以你可以使用类似这样的东西,它非常容易使用(最多 1000 毫秒仅缓冲 3 个项目):
click$
.scan((a, b) => a + 1, 0)
.bufferTime(1000, null, 3)
.filter(buffer => buffer.length > 0)
.concatMap(buffer => Rx.Observable.of(buffer).delay(1000))
.timestamp()
.subscribe(console.log);
观看现场演示:http://jsbin.com/libazer/7/edit?js,控制台,输出 http://jsbin.com/libazer/7/edit?js,console,output
与您可能想要的唯一区别是第一次发射可能会延迟超过 1000 毫秒。这是因为两者bufferTime()
and delay(1000)
操作员会进行延迟以确保始终有至少 1000 毫秒的间隙。