RxJava:知道 observable 何时完成以及 return Boolean Observable 给调用者

RxJava: Know when observable is finished and return Boolean Observable to the caller

我是 RxJava 的新手。我的经验主要来自那些教程: Here, and here.

现在,我发现自己处于 API 调用 Retrofit2 的情况,它将 return 和 Obesrvable<AccessToken>。客户端将按如下方式调用此服务:

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

其中调用 Authenticator 的 class 将从客户端调用 #authenticateWithClientCredentials()

我想要实现的是 return 来自 Authenticator class 的 Observable<Boolean>,一旦 API 调用完成,即在里面onComplete() 表示访问令牌已成功获取并保存在 Authenticator class 中的缓存中。

我尝试了 defer 运算符,但我还是迷路了。

编辑

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

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


    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> return 类型发布了解决方案。

这是 Completable 方法:


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