2017-10-20 10 views
1

RxJavaを初めて使用しています。私の経験は、主にそれらのチュートリアルからです: Herehereです。RxJava:observableが終了したときを知り、ブール値を返します。

今、私はRetrofit2でAPI呼び出しを受けて、Obesrvable<AccessToken>を返す状況に遭遇しました。

Authenticatorと呼ばれるクラスは、クライアントからの #authenticateWithClientCredentials()を呼び出します
public Observable<TokenResult> authenticateWithClientCredentials() { 
     return authService.authenticate("client_credentials").take(1); 
} 

を次のようにクライアントは、このサービスを呼び出します。私が達成したい何

は、APIコールがアクセストークンがフェッチされ、正常Authenticatorクラス内のキャッシュに保存されたことを示すためにonComplete()の内側、すなわち、終了すると、AuthenticatorクラスからObservable<Boolean>を返すことです。

私はdefer演算子を試しましたが、まだ失われています。

EDIT

私はパラメータにコールバックを渡すことができます知っているが、古い古典的なコールバックアプローチを置き換えるためのRxの考えではないでしょうか?

答えて

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>戻り値の型を使用してソリューションを投稿しました。

ここCompletableアプローチです:

 

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

は私が望んでいない、非常に答えてくれてありがとう、しかし。 #authenticateWithClientCredentialsはAuthenticatorクラスのメソッドではなく、Clientクラスのメソッドです。オーセンティケータはauthenticateWithClientCredentialsを呼び出し、トークンをキャッシュします。その後、トークンがキャッシュに正常に設定されたことを示すObservable を返すようにします。 –

+0

@MotassemJalal、更新 – azizbekian

+0

あなたは私に説明してもらえますか?(そして理由は)Completableがより好ましいですか? –

関連する問題