首页 > 解决方案 > 根据条件退出 rxjava 中的 Observable.zip

问题描述

在 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));

标签: javarx-javarx-java2

解决方案


在 zip 中有一条规则,它仅在两个流都发出一个项目时才会返回,因此如果您的对象不是您所期望的,或者您可以使用过滤器,您需要做的是过滤或返回 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));

推荐阅读