实现一个RxJava存储库模式,该模式在单个流中同时返回数据和错误

时间:2018-11-21 07:45:10

标签: android caching repository-pattern rx-java2 android-room

RxJava流中的存储库模式是否可能存在以下情形?

  1. 如果缓存(Room DB)已过期,请从API获取数据。 返回单曲。
  2. 如果有网络呼叫,请将远程数据保存到缓存中。 返回完成内容。
  3. 缓存将是事实的唯一来源,因此请始终从缓存中加载数据。 返回可流动对象。
  4. 如果在任何时候出现错误并且缓存为空,则按原样返回异常,以便可以将错误永久显示在UI上。
  5. 如果在任何时候出现错误并且缓存不为空,则在包装器异常中返回该异常,该异常将在Snackbar中显示一个临时错误。然后回退到显示陈旧缓存的数据。
  6. 这应该允许我在进行下载或缓存加载时显示加载面板,所以我觉得它应该是单个流。

我所有的尝试都在错误报告部分失败,因为原始异常只能在onErrorResumeNext之类的地方访问,而我无法同时返回错误和第5点的数据列表,因为错误会阻止流。

如果上述情况可行,那么如果先前已经存在下载失败的情况,那么还有第六种方法可以阻止第六点吸引用户吗?

例如

  1. 缓存过时,因此有一个网络调用来下载数据。
  2. 服务器已关闭,请求在10秒后超时。
  3. 10秒钟后,由于Snackbar错误而返回缓存。
  4. 用户刷新,服务器仍然关闭,因此在10秒钟后再次加载缓存。

保持缓存的最新状态并不重要,因此,如果API已经失败一次,则最好再次检查API。

感觉我可能会丢失一些东西。

0 个答案:

没有答案