2016-07-27 13 views
0

私はRxJavaを初めて使用しています。私は現在、既存の同期フローを変更し、既存のメソッドに対して返されたオブザーバブルを使用して非同期にしています。RxJava - 返品特定の条件で観察可能

フローの1つでは、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

あなたはfuncは機能別の観測を返してObservable.flatmap(func)、使用することができます。

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