2017-10-20 121 views
1

我是RxJava的新手。我的經驗主要來自那些教程: HerehereRxJava:知道什麼時候可觀察完成並返回布爾值可以對調用者進行查看

現在,我發現自己處於一種與Retrofit2進行API調用的情況,該調用將返回Obesrvable<AccessToken>。客戶端將如下調用這個服務:

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

其中一個名爲Authenticator類將調用#authenticateWithClientCredentials()從客戶端。

我想達成什麼是從Authenticator類返回Observable<Boolean>,一旦API調用完成,即內部onComplete(),表明訪問令牌已被提取和Authenticator類中成功地保存在緩存中。

我試過defer話務員,但我仍然迷路。

編輯

我知道我可以在參數傳遞迴調,而不是Rx的想法,以取代舊的經典回調方法?

回答

2

如果我理解正確你的問題,那麼這就是你要搜索的內容:

 

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

我不知道到底爲什麼你要Observable<Boolean>,Completable得多在這種情況下首選,因爲無論是流已經成功完成或沒有。儘管如此,使用Observable<Boolean>返回類型發佈解決方案。

這裏的Completable方法:

 

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

謝謝你的回答,但不完全是我想要的。 #authenticateWithClientCredentials不是Authenticator類中的方法,它是Client類中的方法。 Authenticator將調用authenticateWithClientCredentials並緩存令牌,之後,我希望Authenticator返回Observable 以指示令牌已成功設置在緩存中。 –

+0

@MotassemJalal,已更新 – azizbekian

+0

您能否向我解釋什麼是(以及爲什麼)Completable更受歡迎? –

相關問題