我是RxJava的新手。我的经验主要来自那些教程: Here和here。
现在,我发现自己处于一种使用Retrofit2进行API调用的情况,它将返回Obesrvable<AccessToken>
。客户将按如下方式调用此服务:
public Observable<TokenResult> authenticateWithClientCredentials() {
return authService.authenticate("client_credentials").take(1);
}
名为Authenticator
的班级将从客户端拨打#authenticateWithClientCredentials()
。
我希望实现的是在API调用完成后从Observable<Boolean>
类返回Authenticator
,即在onComplete()
内,以指示已获取访问令牌并成功保存在Authenticator
类的缓存中。
我尝试了defer
运算符,但我仍然输了。
修改
我知道我可以在参数中传递一个回调,但是Rx的想法是不是要取代旧的经典回调方法?
答案 0 :(得分:4)
如果我正确理解了您的问题,那么这就是您要搜索的内容:
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
});