java - 根据条件退出 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));
解决方案
在 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));
推荐阅读
- node.js - 如何在 mongoDB 中使用提示
- javascript - 奇怪的触摸/点击事件堆栈
- html - 我可以在同一页面上多次使用 AngularJS 模块吗?
- c# - 如何在 AutoMapper 中解析多属性映射的源成员?
- c# - ASP.NET Core MVC 应用程序中的 Microsoft LocalReport (rdl)
- python - Pandas:组合两个数据框并动态扩展行
- python - 暗淡的 PyTorch softmax
- travis-ci - Travis CI 与 Artifactory 的集成
- matlab - 减少 Matlab 雨流计数的 bin 大小
- javascript - 根据组件道具从 API 获取数据