【发布时间】:2021-09-08 03:19:51
【问题描述】:
我有一个用例,我需要从缓存中获取数据,然后使用来自服务器的数据更新缓存。这样,当我下次访问缓存时,它将获得更新的数据。
我尝试使用 concat() 和 merge() 运算符来组合缓存和网络调用,但在客户端我只需要第一个值一旦发出缓存值,网络调用 observable 就会被释放。
下面是我正在使用的代码,有没有更好的方法来实现这一点。目前我正在使用 doOnSuccess 方法进行订阅,这不是正确的方法。
class DataKit{
var cachedData: Data? = null
fun getData(): Single<Data> {
return if(cachedData != null){
Single.just(cachedData)
.doOnSuccess {
getPinInfo()
.subscribeOn(schedulerProvider.io())
.subscribeBy(defaultErrorFun)
}
}else getPinInfo()
}
fun getPinInfo():Single<Data>{
api.getDataFromServer()
.doOnSuccess{ cachedData = it}
.doOnError{cachedData = null}
}
【问题讨论】:
标签: android kotlin rx-java reactive-programming