2016-09-15 4 views
1

TheMovieDb API https://www.themoviedb.org/documentation/api을 사용하고 있는데 인증하려면 3 단계를 거쳐 토큰을 받고 토큰을 사용하여 세션을 만들고 세션 ID를 얻어야합니다. 이 작업을 수행하려면 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); 
} 

이 체인 ObservablesObservable을 할 수 있습니까? 나는 사용할 경험이 없다. Observables

답변

0

flatMap 연산자가 이상적이다. 다음과 같이 3 개의 관측 대상을 작성하십시오.

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이 하나의 onNext 이벤트만을 생성하기 때문에 관련이 없습니다. –