RxJava发出第一个元素并缓冲其他元素

时间:2017-03-12 08:53:11

标签: rx-java

我的观察者过度生产,我需要处理所有元素。当我第一次订阅时,我希望尽快收到该元素,但我希望缓冲其他人,直到 a)处理第一个元素 和 b)1秒超时。

我目前的实施是:

connectionService.subscribe(request)
.buffer(1, TimeUnit.SECONDS)
.flatMap(merger)
.subscribe(...)

“合并”完成了工作。这有两个问题:

1)第一个元素也有1秒延迟,但它应该立即可用

2)如果合并时间超过1秒,我会在未处理前一个元素时收到下一个元素(请注意,合并第一个元素时只会出现问题)

1 个答案:

答案 0 :(得分:0)

使用类似的东西(假设RxJava 1):

connectionService.subscribe(request)
.onBackpressureBuffer(...)
.flatMap(merger, 1)
.subscribe(...)

使用onBackpressureBuffer运算符的参数来指定溢出时会发生什么。

.flatMap(..., 1)确保从上游请求恰好1个项目。