RxJava:如何判断Observable何时完成并向调用者返回Boolean Observable

3
我是一名RxJava的新手,我的经验主要来自以下教程: 这里这里
现在,我发现自己的情况是,我有一个使用Retrofit2进行API调用的服务,将返回一个Obesrvable<AccessToken>。客户端将按照以下方式调用此服务:
public Observable<TokenResult> authenticateWithClientCredentials() {
        return authService.authenticate("client_credentials").take(1);
}

一个名为Authenticator的类将从客户端调用#authenticateWithClientCredentials()

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

我尝试过使用defer操作符,但仍然感到困惑。

编辑

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

1个回答

4
如果我理解您的问题正确,那么这就是您正在寻找的内容:
``` client.authenticateWithClientCredentials() .map(token -> { // 将 `token` 保存到缓存 return token; }) .flatMap(integer -> Observable.just(Boolean.TRUE)) .subscribe(aBoolean -> { // 成功 }, throwable -> { // 错误 }); ```
我不知道你为什么需要Observable<Boolean>,在这种情况下,Completable更受欢迎,因为流要么成功完成,要么不完成。尽管如此,仍然发布了使用Observable<Boolean>返回类型的解决方案。
这是Completable方法的实现:
``` client.authenticateWithClientCredentials() .flatMapCompletable(integer -> { // 将 `token` 保存到缓存 return Completable.complete(); }) .subscribe(() -> { // 成功 }, throwable -> { // 错误 }); ```

谢谢您的回答,但不完全是我想要的。 #authenticateWithClientCredentials 不是 Authenticator 类中的方法,而是 Client 类中的方法。Authenticator 将调用 authenticateWithClientCredentials 并缓存令牌,之后我希望 Authenticator 返回一个 Observable<Boolean> 来指示令牌已成功设置在缓存中。 - Motassem Jalal
请问您能否解释一下什么是Completable,以及为什么它更受欢迎? - Motassem Jalal
Completable 表示一个流,它要么完成,要么失败(即只存在 onComplete()onError() 方法)。在您的情况下,逻辑上讲,无论是您正在执行的操作完成还是以错误终止,都是合理的。显然,这不是一个由 Observable<Boolean> 表示的无限布尔值流。 - azizbekian
非常感谢您能使用Completable添加另一种解决方案。提前致谢。 - Motassem Jalal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接