RxJava:知道什么时候可观察完成并返回布尔值可以对调用者进行查看

RxJava:知道什么时候可观察完成并返回布尔值可以对调用者进行查看

问题描述:

我是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的想法,以取代旧的经典回调方法?

如果我理解正确你的问题,那么这就是你要搜索的内容:

 

    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更受欢迎? –