[英]RxJava 2. Buffer one observables items until other observable complete
[英]RxJava - how to do repeat with takeUntil operations with two observables, one observable depending on other
我有一个场景,我需要调用搜索 api 以根据地图上的搜索半径获取特定项目的列表。 要求是至少显示五个结果。 就我而言,我有两个 Apis(两个 observables)。 首先,我需要调用getExpandedSearchRadius()
来获取半径并执行第二次调用, doSearch()
以半径为参数。 假设doSearchApi
调用仅返回 2 个结果,我需要重复两次 api 调用,直到获得最小结果 5。在每次重复时, getExpandedSearchRadius
需要调用以返回新的扩展半径并使用新半径执行doSearch
。
这里的问题是每次调用repeat()
getExpandedSearchRadius
Api 都没有执行,只有第二次调用以初始半径执行,导致相同的 searchResponse。 下面是我尝试过的示例。
getExpandedSearchRadius().flatMap{ radius -> doSearch(radius)}
.repeat()
.takeUntil(searchResponse.getItems().size >=5)
.map(anotherClass::displayOnMap)
您可以使用 Observable.defer(),因为它充当 Observable 工厂,然后,当重复操作符生效时,构建器工厂 .defer() 会创建另一个新的 observable 并且也会调用 getExpandedSearchRadius()。
请参阅文档:(延迟运算符)
示例代码:
Observable.defer(() -> getExpandedSearchRadius())
.flatMap{ radius -> doSearch(radius)}
.repeat()
.takeUntil(searchResponse.getItems().size >=5)
.map(anotherClass::displayOnMap)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.