2016-09-15 8 views
1

私はTheMovieDb API https://www.themoviedb.org/documentation/apiを使用しています。認証する場合は、トークンを取得し、トークンを使用してセッションを作成し、セッションIDを取得する3つの手順を実行する必要があります。私はこれを行うには3 Observableを使用したいが、私はどのようにチェーンObservablesこれを行うことができますかわからない。どのように複数のObservableをチェーンに接続する

マイObservables

public interface AuthenticationService { 

@GET("authentication/token/new") 
Observable<Token> getMdbToken(); 

@GET("authentication/token/validate_with_login") 
Observable<Token> createSessionId(Credentials credentials,String token); 

@GET("authentication/session/new") 
Observable<Session> getSessionId(String token); 
} 

これはチェーンObservablesに1 Observableを作ることは可能ですか?私は使用する経験がありませんObservables

答えて

0

flatMapオペレータがこれに最適です。

getMdbToken() 
     .flatMap(new Func1<Token, Observable<Token>>() { 
      @Override 
      public Observable<Token> call(Token token) { 
       return createSessionId(credentials, token); 
      } 
     }).flatMap(new Func1<Token, Observable<Session>>() { 
    @Override 
    public Observable<Session> call(Token token) { 
     return getSessionId(String token); ; 
    } 
}); 
+0

ありがとう、これは動作します。しかし、これは特別な順序で行われますか?たとえば、getSessionIdがcreateSessionIdの前に開始される可能性はありますか? –

+0

一般的には保証されません。 'flatMap'は注文を保証しません([diagram](http://reactivex.io/documentation/operators/images/flatMap.c.png)参照)。オーダーが 'concatMap'([diagram](http://reactivex.io/documentation/operators/images/concatMap.png))を探しているかどうかを確認する必要がある場合。しかし、あなたのケースでは、シーケンス内のすべてのObservableは1つのonNextイベントしか生成しないので、関係はありません。 –

関連する問題