在我以前的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批处理被丢弃......
答案 0 :(得分:1)
您需要将timeout()
应用于zip
运算符的输出端。更简单的重载将发出TimeoutException
,您可以在Subscriber
中捕获,也可以使用retry()
,如果您的资源重新订阅有意义。