RxJava拉链有时间限制

时间:2015-03-10 11:15:44

标签: java reactive-programming rx-java

在我以前的question我最终使用zip(Iterable,Func)来使用reduce函数来压缩可变数量的可观察量。

因此zip从每个传递的observable中获取1个发射值并应用函数..

我们如何限制等待下一个observable发出值的时间? (如果时间过去,它应该是当前的zip操作并等待新的批处理)

这是一张marbel图

time  ---|-------|------|------------*------|---|---------->
data1 ---a-------|------a------------*------a---|---------->
data2 ---|----b--|------|--b---------*------|-b-|---------->
data3 ---|------c|------|------------*------|--c|---------->
zip   ---|-------X------|------------*------|---X---------->

你可以先看到" abc"批次是在时间框架内到达并成功获得压缩,但下次" c"在data3流中得到延迟和时间到期所以等待它的整个zip批处理被丢弃......

1 个答案:

答案 0 :(得分:1)

您需要将timeout()应用于zip运算符的输出端。更简单的重载将发出TimeoutException,您可以在Subscriber中捕获,也可以使用retry(),如果您的资源重新订阅有意义。