【问题标题】:RxJava: Know when observable is finished and return Boolean Observable to the callerRxJava:知道 observable 何时完成并将 Boolean Observable 返回给调用者
【发布时间】:2017-10-20 11:17:56
【问题描述】:

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

现在,我发现自己的 API 调用 Retrofit2 将返回 Obesrvable<AccessToken>。客户端会这样调用这个服务:

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

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

我想要实现的是从Authenticator 类返回一个Observable&lt;Boolean&gt;,一旦API 调用完成,即在onComplete() 内,以指示访问令牌已被获取并保存在缓存内Authenticator上课成功。

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

编辑

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

【问题讨论】:

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


    【解决方案1】:

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

    client.authenticateWithClientCredentials() .map(token -> { // save `token` into cache return token; }) .flatMap(integer -> Observable.just(Boolean.TRUE)) .subscribe(aBoolean -> { // success }, throwable -> { // error });

    我不知道你到底为什么想要Observable&lt;Boolean&gt;,Completable 在这种情况下更受欢迎,因为流要么已成功完成,要么没有。尽管如此,还是使用Observable&lt;Boolean&gt; 返回类型发布了解决方案。

    这是Completable 方法:

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

    【讨论】:

    • 谢谢你的回答,但不是我想要的。 #authenticateWithClientCredentials 不是 Authenticator 类中的方法,它是 Client 类中的方法。 Authenticator 将调用 authenticateWithClientCredentials 并缓存令牌,之后我希望 Authenticator 返回一个 Observable 以指示令牌已成功设置在缓存中。
    • 您能否向我解释一下 Completable 是什么(以及为什么)更受欢迎?
    • Completable 表示一个流,它要么完成要么失败(即仅存在 onComplete()onError() 方法)。在您的情况下,该操作(您正在执行的操作)完成或以错误终止是合乎逻辑的。显然,它不是Observable&lt;Boolean&gt; 所代表的无限布尔值流。
    • 如果您可以使用 Completable 添加另一个解决方案,我将不胜感激。提前致谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    相关资源
    最近更新 更多