【发布时间】:2020-07-26 19:29:07
【问题描述】:
尝试使用离线优先的应用程序,我设法创建了一个工作存储库模式,它首先检查缓存,然后是数据库,最后是 api。我是这样做的:
private fun cachedTopics(): Maybe<List<Topic>> { ... }
private fun databaseTopics(): Maybe<List<Topic>> { ... }
private fun apiTopics(): Maybe<List<Topic>> { ... }
Maybe.concat(cachedTopics(), databaseTopics(), apiTopics())
.firstOrError()
.subscribeOn(scheduler)
现在,问题是我将部分数据保存在数据库中(不是所有主题)。如果用户连接到互联网并浏览,显示的数据将只是数据库中的数据。但这并不是用户应该访问的所有内容(如果他们连接到互联网)。我知道这是由于.firstOrError() 调用造成的。
但我想知道是否有一种方法可以连接数据库 + api 的不同结果(api 可能会失败并因此返回 0 个结果)并返回一个 Single。
编辑
为了更清楚,我想要以下内容:
IF CACHE IS NOT EMPTY
RETURN DISTINCT(DB + CACHE)
ELSE
UPDATE CACHE WITH API RESULT
RETURN DISTINCT(DB + API)
如果 API 调用失败,将自动导致没有结果。
【问题讨论】:
标签: android kotlin repository-pattern rx-kotlin