在RXJava中,我有2个可观察对象,它们是来自2个下游调用的响应。一个下游调用是一个长轮询调用,另一个是短轮询并立即返回。 我正在使用Observable.zip合并两个响应的响应。以下代码可以正常工作。
Observable
.zip(observable1, observable2)
.flatMap(update -> foo(update));
现在我要实现的是,如果短的下游调用(observable1)的输出不包含特定值,则跳过zip,即不要等待更长的下游调用(observable2)的输出。 我尝试通过以下方式实现它,但如果条件为true,则它不会使用observable2压缩,但它甚至不会发出observable1响应。
Observable finalresponse = observable1
.takeWhile(obsResponse1 -> checkIfValueExist(obsResponse1))
.zipWith(observable2, (observable1, observable2) -> execute(observable1, observable2))
.flatMap(update -> main.execute(update));
答案 0 :(得分:0)
在zip中有一条规则,只有当两个流都都发射一个项目时,它才会返回,因此,如果您的对象不是您期望的对象,或者您可以这样做,则您需要过滤或返回observable中的Observable.empty()。使用过滤器
Observable
.zip(Observable.just(1).filter(integer -> integer==1), Observable.just(2).filter(integer -> integer==3),(integer, integer2) -> integer)
.flatMap(update -> foo(update));