EasyHttp
EasyHttp copied to clipboard
缓存策略为USE_CACHE_FIRST能不能提供一个回调用来接收最新的数据
【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】
建议收集
-
issue 是否有人曾提过类似的问题?【必答】无
-
你觉得框架有什么不足之处?【必答】
-
缓存策略为USE_CACHE_FIRST时,取到缓存就把回调置空了,这样就导致没办法及时拿到最新的数据去刷新界面了,建议不要把回调置空,或者新增一个回调,okgo里面就有类型的回调,onSuccess和onCacheSuccess
-
你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)
小伙子,缓存速度快但数据不是最新的,数据是最新的但请求慢,鱼和熊掌不可兼得,成功的回调调用两次本身就是违背常理的,站在用户的角度上,界面的数据加载出来了,但是后面又重新刷新了一次,难道用户不会觉得这波操作很诡异吗?
话是这么说,但是架不住总有产品提这样的需求。。所以开发这边也难免会用到这方面的东西
小伙子,经过认真思考和慎重考虑,最终不采纳这个建议,原因如下:
- 回调两次成功是一件不符合常理的事情,在普通人的认知情况下,一次网络请求成功的回调只会调用一次
- 还有第一次使用缓存回调成功,但是假设第二次请求失败了,此时会回调失败监听,那么会给用户造成很奇怪的体验
建议你采用其他方式实现,方式有如下两种:
- 使用预加载,即使用无回调的先提前请求一次
- 或者你在请求的时候先使用
EasyConfig.getInstance().getHandler().readCache()
读取缓存,然后再发起网络请求
小伙子,经过认真思考和慎重考虑,最终不采纳这个建议,原因如下:
- 回调两次成功是一件不符合常理的事情,在普通人的认知情况下,一次网络请求成功的回调只会调用一次
- 还有第一次使用缓存回调成功,但是假设第二次请求失败了,此时会回调失败监听,那么会给用户造成很奇怪的体验
建议你采用其他方式实现,方式有如下两种:
- 使用预加载,即使用无回调的先提前请求一次
- 或者你在请求的时候先使用
EasyConfig.getInstance().getHandler().readCache()
读取缓存,然后再发起网络请求
我估计之后还可以慎重考虑一下,因为现有逻辑基本上都是这样,如果本地缓存和网络请求都会请求到数据的话,成功回调会回调两次,如果缓存读取成功,网络请求失败,网络请求那次失败就不返回了
小伙子,暂时不会考虑,我感觉从代码设计上理解不合理,要么缓存,要么网络,但是又想缓存又想网络,是很怪异的。
缓存占位不是非常常见的需求么?我们拿头条或者任意不联网可显示内容的app来举例,都是先显示缓存同时请求网络之后显示网络数据
@Reginer 是的,这种场景很常见,但是交由网络请求框架来做是一件太合理的事情,上面我也解释过一遍了。
但是你有没有想过,USE_CACHE_FIRST是因为什么取出来的这个名字。现在你接受不了也许也正常,随着你以后的更新总会那样实现。 至于实现的逻辑上面已经告诉你了,当然,库是你的。