RxJava - 根据条件返回特定的Observable

时间:2016-07-27 09:56:02

标签: asynchronous rx-java

我是RxJava的新手。我目前正在修改现有的同步流,并使用返回的observable为现有方法进行异步。

在其中一个流程中,我进行远程调用以从DB接收项目。因为对数据库的调用是异步的,所以我给了一个observable。但是,该项可能不存在于数据库中,在这种情况下,该值将为NULL。

如果值为NULL,我需要对各种其他远程服务进行额外的异步调用,最终返回可观察的响应。

我不明白的是如何使用RxJava实现这样的流程。这是一个示例伪代码:

void searchSomethingAsych(String key) {

    Observable<SearchResult> result = doTheSearch(key);
}

Observable<SearchResult> doTheSearch(String key) {

    Observable<SearchResult> resultFromDb = checkIfExistsInDb(key);

    // THIS IS WHERE I AM NOT SURE HOW TO DO THIS
    resultFromDb.subscribe((result)- > {
        if(result == null){
            // .. go get this from somewhere else
            Observable<SearchResult> resultFromSomewhere = getSearchResultFromSomewhereElse(key);

            // how do I return the 'resultFromSomewhere' ????
        }
    });

}

1 个答案:

答案 0 :(得分:2)

你可以使用Observable.flatmap(func),其中func函数返回另一个Observable:

resultFromDb.flatMap((result) -> {
    if(result == null){
        return getSearchResultFromSomewhereElse(key);
    } else {
      return Observable.just(result)
});