我是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' ????
}
});
}
答案 0 :(得分:2)
你可以使用Observable.flatmap(func)
,其中func函数返回另一个Observable:
resultFromDb.flatMap((result) -> {
if(result == null){
return getSearchResultFromSomewhereElse(key);
} else {
return Observable.just(result)
});