RxJava2 concat 运算符不返回适当的序列



当我向网络发出请求时,如果发生错误,那么我将从缓存和错误中返回数据。但有时我不会从缓存中获取数据,但我只收到一个错误。第一次启动应用程序时,我总是只收到一个错误。如果我调用 getDashboard 方法一次或几次,那么一切都很好。 这是一段代码。

.onErrorResumeNext(throwable -> {
return Observable.concat(Observable.just(fromCache), Observable.error(throwable));
});

完整代码在这里

https://gist.github.com/githubgist123/7e027675bb4db07fef606e23f39f8a96

抱歉,但我认为您进行缓存的方式是错误的。如果您连续请求两次并且缓存为空,则最终将有两个网络请求运行并相互竞争以写入缓存。你不想要那个。

您需要的是:

Observable.concat(
cache(),
network().share().doOnNext(setCache(...)).onErrorReturn(...)
.first()
)

您也可以考虑synchronized缓存,或者使用正确的数据结构使其线程安全。

最新更新