RxJava流中的存储库模式是否可能存在以下情形?
- 如果缓存(Room DB)已过期,请从API获取数据。 返回单曲。
- 如果有网络呼叫,请将远程数据保存到缓存中。 返回完成内容。
- 缓存将是事实的唯一来源,因此请始终从缓存中加载数据。 返回可流动对象。
- 如果在任何时候出现错误并且缓存为空,则按原样返回异常,以便可以将错误永久显示在UI上。
- 如果在任何时候出现错误并且缓存不为空,则在包装器异常中返回该异常,该异常将在Snackbar中显示一个临时错误。然后回退到显示陈旧缓存的数据。
- 这应该允许我在进行下载或缓存加载时显示加载面板,所以我觉得它应该是单个流。
我所有的尝试都在错误报告部分失败,因为原始异常只能在onErrorResumeNext
之类的地方访问,而我无法同时返回错误和第5点的数据列表,因为错误会阻止流。
如果上述情况可行,那么如果先前已经存在下载失败的情况,那么还有第六种方法可以阻止第六点吸引用户吗?
例如
- 缓存过时,因此有一个网络调用来下载数据。
- 服务器已关闭,请求在10秒后超时。
- 10秒钟后,由于Snackbar错误而返回缓存。
- 用户刷新,服务器仍然关闭,因此在10秒钟后再次加载缓存。
保持缓存的最新状态并不重要,因此,如果API已经失败一次,则最好再次检查API。
感觉我可能会丢失一些东西。