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