【发布时间】:2019-01-28 18:17:52
【问题描述】:
在 RXJava 中,我有 2 个 observables,它们是来自 2 个下游调用的响应。一个下游调用是一个长轮询调用,另一个是一个短调用并立即返回。 我正在使用 Observable.zip 来组合两个响应的响应。下面的代码可以正常工作。
Observable
.zip(observable1, observable2)
.flatMap(update -> foo(update));
现在我要实现的是,如果短下游调用 (observable1) 的输出不包含特定值,则跳过 zip,即不要等待较长下游调用 (observable2) 的输出。 我尝试以下面的方式实现它,但如果条件为真,它不会与 observable2 一起压缩,但它甚至不会发出 observable1 响应。
Observable finalresponse = observable1
.takeWhile(obsResponse1 -> checkIfValueExist(obsResponse1))
.zipWith(observable2, (observable1, observable2) -> execute(observable1, observable2))
.flatMap(update -> main.execute(update));
【问题讨论】:
-
你为什么要进行并行调用?为什么不先调用最短的下游调用,检查值并在此基础上进行长调用
-
这些只是该区域发出的几个调用中的两个。为了优化,我不能有这些序列。
-
在你的情况下,顺序调用会更高效,因为你一开始就不会为第二次调用占用内存。