我的用例如下:我得到的事件有时会突然爆发.如果发生爆发,我只需要处理一次.去抖是这样做的.
然而,debounce只给了我一个爆发的最后一个元素,但我需要知道一个爆发中的所有元素聚合在它们上面(使用flatmap).
这可以通过定时窗口或缓冲区来完成,但是,这些是固定间隔,因此缓冲区/窗口超时可能发生在突发中间,因此将突发分成两部分而不是1.
所以我想要的是类似的东西
.
.
event: a
.
. -> a
.
.
.
.
.
.event: b
.event: c
.event: d
.
.-> b,c,d
.
.
.
.
.event : e
.
. -> e
.
Run Code Online (Sandbox Code Playgroud)
Mat*_*ell 21
这可以通过将debounced流作为关闭选择器传递来实现缓冲,例如:
var s = Rx.Observable.of('a')
.merge(Rx.Observable.of('b').delay(100))
.merge(Rx.Observable.of('c').delay(150))
.merge(Rx.Observable.of('d').delay(200))
.merge(Rx.Observable.of('e').delay(300))
.share()
;
s.buffer(s.debounce(75)).subscribe(x => console.log(x));
Run Code Online (Sandbox Code Playgroud)
这是一个可运行的版本:https://jsbin.com/wusasi/edit? js,console,output
| 归档时间: |
|
| 查看次数: |
2985 次 |
| 最近记录: |