RxJava:知道observable何时完成并将Boolean Observable返回给调用者

时间:2017-10-20 11:17:57

标签: android rx-java reactive-programming rx-android rx-java2

我是RxJava的新手。我的经验主要来自那些教程: Herehere

现在,我发现自己处于一种使用Retrofit2进行API调用的情况,它将返回Obesrvable<AccessToken>。客户将按如下方式调用此服务:

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

名为Authenticator的班级将从客户端拨打#authenticateWithClientCredentials()

我希望实现的是在API调用完成后从Observable<Boolean>类返回Authenticator,即在onComplete()内,以指示已获取访问令牌并成功保存在Authenticator类的缓存中。

我尝试了defer运算符,但我仍然输了。

修改

我知道我可以在参数中传递一个回调,但是Rx的想法是不是要取代旧的经典回调方法?

1 个答案:

答案 0 :(得分:4)

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


    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
          });