2017-10-20 12 views
1

RxJava를 처음 사용합니다. 내 경험은 주로 자습서에서 나온 것입니다 : Herehere.RxJava : 관측 가능 시간이 끝나면 알 수 있고 부울을 반환합니다. 호출자에게 관찰 가능

이제는 Obesrvable<AccessToken>을 반환하는 Retrofit2 API 호출이있는 상황에서 발견되었습니다. 다음과 같이 클라이언트는이 서비스를 호출합니다 :

public Observable<TokenResult> authenticateWithClientCredentials() { 
     return authService.authenticate("client_credentials").take(1); 
} 

Authenticator라는 클래스가 클라이언트에서 #authenticateWithClientCredentials()를 호출합니다 경우. 내가 달성하고자하는 어떤

는 API 호출이 액세스 토큰이 인출되어 성공적으로 Authenticator 클래스 내부 캐시에 저장 한 것을 나타 내기 위해서 onComplete() 내부 즉, 완료되면, Authenticator 클래스에서 Observable<Boolean>을 반환하는 것입니다.

나는 defer 연산자를 시도했지만 여전히 잃어 버렸습니다.

편집

내가 매개 변수에 콜백을 전달할 수 있습니다 알고 있지만, 오래된 고전 콜백 방식을 대체하는 수신의 생각이 아니다?

내가 제대로 질문을 이해 한 경우

답변

2

은, 다음이 당신이 찾고있는 무엇을 : 당신이 Observable<Boolean>을 원하는 이유를 정확히

 

    client.authenticateWithClientCredentials() 
      .map(token -> { 
       // save `token` into cache 
       return token; 
      }) 
      .flatMap(integer -> Observable.just(Boolean.TRUE)) 
      .subscribe(aBoolean -> { 
       // success 
      }, throwable -> { 
       // error 
      }); 
 

나도 몰라, Completable이 훨씬 더이 경우 바람직하다 중 스트림 때문에 성공적으로 완료했거나 완료하지 못했습니다. 그럼에도 불구하고 Observable<Boolean> 반환 유형을 사용하여 솔루션을 게시했습니다.

 

    client.authenticateWithClientCredentials() 
      .flatMapCompletable(integer -> { 
       // save `token` into cache 
       return Completable.complete(); 
      }) 
      .subscribe(() -> { 
       // success 
      }, throwable -> { 
       // error 
      }); 
 
+0

대답 주셔서 감사합니다,하지만 난 싶어 꽤 무엇 :

다음은 Completable 방법입니다. #authenticateWithClientCredentials는 Authenticator 클래스의 메서드가 아니며 Client 클래스의 메서드입니다. Authenticator는 authenticateWithClientCredentials를 호출하고 토큰을 캐쉬합니다. 그 후에 Authenticator가 Observable 을 반환하여 토큰이 캐시에 성공적으로 설정되었음을 나타냅니다. –

+0

@MotassemJalal, 업데이트 – azizbekian

+0

당신은 나에게 설명 할 수 있습니까? (그리고 왜) 완료 가능이 더 선호됩니까? –