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

Mot*_*lal 4 android reactive-programming rx-java rx-android rx-java2

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

现在,我发现自己在使用 Retrofit2 进行 API 调用时会返回一个Obesrvable<AccessToken>. 客户端将调用此服务如下:

public Observable<TokenResult> authenticateWithClientCredentials() {
        return authService.authenticate("client_credentials").take(1);
}
Run Code Online (Sandbox Code Playgroud)

Authenticator调用的类#authenticateWithClientCredentials()将从客户端调用。

我想要实现的是Observable<Boolean>Authenticator类中返回一个,一旦 API 调用完成,即 insideonComplete()表示访问令牌已成功获取并保存在Authenticator类内的缓存中。

我试过defer接线员,但我还是迷路了。

编辑

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

azi*_*ian 5

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


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