adr*_*nmc 3 javascript rxjs reactivex rxjs5
我有很多事件要发送到服务。但请求有速率限制,每个请求都有计数限制:
bufferTime(1000)bufferCount(100)问题是,我不确定如何以有意义的方式将它们组合起来。
让事情变得更加复杂的是,如果我们没有达到任何一个限制,我需要确保事件立即完成。
例如,如果在非繁忙时间只有一个事件,我不希望它实际上等待 100 个事件项才让它通过。
我还发现bufferWithTimeOrCountRxJS v4 中存在一个,尽管我不确定即使我有它我会如何使用它。
这是我为您制作的 JSBin 来测试您的解决方案:
http://jsbin.com/fozexehiba/1/edit?js,控制台,输出
任何帮助将不胜感激。
该运算符采用三个参数,结合了和bufferTime()的功能。请参阅http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-bufferTime。bufferTimebufferCount
您.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);
Run Code Online (Sandbox Code Playgroud)
查看现场演示:http://jsbin.com/libazer/7/edit?js, console,output
与您可能想要的唯一区别是第一次发射可能会延迟超过 1000 毫秒。这是因为 和bufferTime()操作delay(1000)员都会进行延迟以确保始终有至少 1000 毫秒的间隙。
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |