2016-07-27 65 views
0

我是RxJava的新手。我目前正在修改現有的同步流程,並使用已有方法的返回觀察值進行異步處理。RxJava - 根據條件返回特定的可觀察條件

在其中一個流程中,我進行遠程調用以從DB接收項目。由於對數據庫的調用是異步的,因此我會返回一個可觀察對象。但是,該項目可能不存在於數據庫中,在這種情況下,值將爲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' ???? 
     } 
    }); 

} 

回答

2

您可以使用Observable.flatmap(func),其中func被函數返回另一個可觀測:

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