【发布时间】:2016-01-20 22:07:07
【问题描述】:
我正在寻找一个我尝试在 RxJava 的帮助下实现的流程示例。
假设我想显示一个数据列表。流程应如下所示:
- 读取缓存。如果它包含数据,则显示它;
-
向服务器发送 API 请求:
如果返回数据,则缓存并显示。
如果返回错误并且没有缓存数据,则显示错误。
如果它返回错误并且缓存了某些内容,则什么也不做。
现在我有一个method that does something similar(从Jake's u2020 获得了很多灵感)。主要区别在于它使用内存缓存,这意味着不需要单独的Observable 来从缓存中读取,并且可以同步完成。
我不知道如何组合两个可观察对象(一个用于从缓存中读取,另一个用于 API 调用)并获得上述流程。
有什么建议吗?
【问题讨论】:
-
看起来你需要
amb: github.com/ReactiveX/RxJava/wiki/… -
@zsxwing 你能举个例子吗?我愿意接受建议,即使我找到了答案(这并不完美)。
-
我倾向于将缓存处理留给网络客户端。如果您使用 HTTP,则响应中的标头专用于指示客户端应实现哪种类型的缓存,对象应保留多长时间......更不用说还有可能验证您的缓存是仍然有效并在必要时更新(返回代码 304)。
-
@EgorN 我想你想要第一个返回的 Observable 的结果,无论是来自缓存还是服务器。如果是这样,您可以使用
amb(readDataFromCache(), apiCall())。 -
@zsxwing 这不是我真正想要的。我希望它先显示缓存数据,然后如果服务器的响应正常,则显示来自服务器的更新数据。