RxJava-如何使用takeUntil操作重复两个可观察对象,一个可观察对象依赖于另一个

RxJava-如何使用takeUntil操作重复两个可观察对象,一个可观察对象依赖于另一个,java,rx-java2,Java,Rx Java2,我有一个场景,需要调用搜索api,根据地图上的搜索半径获取特定项目的列表。要求至少显示五个结果。在我的例子中,我有两个API和两个可观测值。首先,我需要调用getExpandedSearchRadius来获取radius,然后执行第二个调用,即使用radius作为参数的doSearch。假设doSearchApi调用只返回2个结果,我需要重复这两个api调用,直到得到最小结果5。每次重复getExpandedSearchRadius时,需要调用以返回新的扩展半径,并使用新半径执行doSearch

我有一个场景,需要调用搜索api,根据地图上的搜索半径获取特定项目的列表。要求至少显示五个结果。在我的例子中,我有两个API和两个可观测值。首先,我需要调用getExpandedSearchRadius来获取radius,然后执行第二个调用,即使用radius作为参数的doSearch。假设doSearchApi调用只返回2个结果,我需要重复这两个api调用,直到得到最小结果5。每次重复getExpandedSearchRadius时,需要调用以返回新的扩展半径,并使用新半径执行doSearch

这里的问题是每次调用repeat时 getExpandedSearchRadius Api未执行,只有第二个调用使用初始radius执行,导致相同的searchResponse。下面是我试过的一个例子

getExpandedSearchRadius().flatMap{ radius -> doSearch(radius)}
                      .repeat()
                      .takeUntil(searchResponse.getItems().size >=5)
                      .map(anotherClass::displayOnMap)

您可以使用Observable.defer,因为它充当可观察工厂,然后,当repeat操作符生效时,builder factory.defer创建另一个新的可观察对象,并将调用getExpandedSearchRadius

见文件:

示例代码:

Observable.defer(() -> getExpandedSearchRadius())
        .flatMap{ radius -> doSearch(radius)}
                  .repeat()
                  .takeUntil(searchResponse.getItems().size >=5)
                  .map(anotherClass::displayOnMap)

getExpandedSearchRadius是如何实现的。您是否碰巧使用了just?getExpandedSearchRadius返回发出单个项目的Observable。它第一次在会话中呼叫时,将是6英里。第二次呼叫同样增加到20英里。每次调用时,半径都会增加。我的意思是,发布getExpandedSearchRadius的实现。