我的观察者过度生产,我需要处理所有元素。当我第一次订阅时,我希望尽快收到该元素,但我希望缓冲其他人,直到 a)处理第一个元素 和 b)1秒超时。
我目前的实施是:
connectionService.subscribe(request)
.buffer(1, TimeUnit.SECONDS)
.flatMap(merger)
.subscribe(...)
“合并”完成了工作。这有两个问题:
1)第一个元素也有1秒延迟,但它应该立即可用
2)如果合并时间超过1秒,我会在未处理前一个元素时收到下一个元素(请注意,合并第一个元素时只会出现问题)
答案 0 :(得分:0)
使用类似的东西(假设RxJava 1):
connectionService.subscribe(request)
.onBackpressureBuffer(...)
.flatMap(merger, 1)
.subscribe(...)
使用onBackpressureBuffer
运算符的参数来指定溢出时会发生什么。
.flatMap(..., 1)
确保从上游请求恰好1个项目。