我有以下要求:
我尝试使用缓存/发布运算符来完成它,但问题是初始请求何时返回错误。此时,我希望重置流,并且对该方法的后续调用应该运行新的网络请求,而不是每次都返回错误。
这是我目前所拥有的。
private Flowable<List<Data>> dataObservable;
private Flowable<List<Data>> getData(){
if(dataObservable == null){
dataObservable = apiService.getData()
.doOnError(throwable -> {
dataObservable = null;
})
.cache();
}
return dataObservable;
}
这样可行,但代码感觉不对。必须有更好的方法。
答案 0 :(得分:0)
您可以提前定义可观察对象,并且在订阅它之前它实际上不会做任何事情。这需要担心的null
值少一点。
您可以使用retry()
运算符或其变体在错误时自动重试网络操作。
最后,cache()
运营商将确保只有一个网络连接订阅处于活动状态。每个订阅者都将从observable获得任何更新,并且将无视任何遇到的网络错误。
Flowable<List<Data>> dataObservable = apiService.getData()
.retry()
.cache();
答案 1 :(得分:0)
显然没有那个运算符。
在Observable, retry on error and cache only if completed上讨论了该问题 而Plato为此创建了一个不错的小库 platoblm/rx-onerror-retry-cache。