RxJava:知道什么时候可观察完成并返回布尔值可以对调用者进行查看
问题描述:
我是RxJava的新手。我的经验主要来自那些教程: Here和here。RxJava:知道什么时候可观察完成并返回布尔值可以对调用者进行查看
现在,我发现自己处于一种与Retrofit2进行API调用的情况,该调用将返回Obesrvable<AccessToken>
。客户端将如下调用这个服务:
public Observable<TokenResult> authenticateWithClientCredentials() {
return authService.authenticate("client_credentials").take(1);
}
其中一个名为Authenticator
类将调用#authenticateWithClientCredentials()
从客户端。
我想达成什么是从Authenticator
类返回Observable<Boolean>
,一旦API调用完成,即内部onComplete()
,表明访问令牌已被提取和Authenticator
类中成功地保存在缓存中。
我试过defer
话务员,但我仍然迷路。
编辑
我知道我可以在参数传递回调,而不是Rx的想法,以取代旧的经典回调方法?
答
如果我理解正确你的问题,那么这就是你要搜索的内容:
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
});
谢谢你的回答,但不完全是我想要的。 #authenticateWithClientCredentials不是Authenticator类中的方法,它是Client类中的方法。 Authenticator将调用authenticateWithClientCredentials并缓存令牌,之后,我希望Authenticator返回Observable以指示令牌已成功设置在缓存中。 –
@MotassemJalal,已更新 – azizbekian
您能否向我解释什么是(以及为什么)Completable更受欢迎? –