Suzhibin / ZBNetworking

AFNetworking4.X封装 GET/POST /PUT/PATCH /DELETE / UPLOAD /DOWNLOAD 网络请求 添加了缓存机制,插件机制,断点下载,重复请求的处理,取消当前请求等功能.支持iOS,macOS, watchOS, tvOS
MIT License
242 stars 44 forks source link

ZBRequestTypeCache 问题 #31

Closed lishangjing-spec closed 6 months ago

lishangjing-spec commented 6 months ago

/* 读取缓存: 有缓存,读取缓存--无缓存,重新请求并存储缓存 缓存支持响应数据的格式:ZBJSONResponseSerializer,ZBHTTPResponseSerializer 可以与ZBRequestTypeRefreshAndCache 配合使用 /

并不会自动重新请求,会一直读取缓存内容,其中 可以与ZBRequestTypeRefreshAndCache 配合使用,是如何处理,是需要手动进行吗

Suzhibin commented 6 months ago

ZBRequestTypeCache 在有缓存下,会一直读缓存。你在合适的时候需要调用ZBRequestTypeRefreshAndCache,比如下拉刷新 更新缓存 @lishangjing-spec

lishangjing-spec commented 6 months ago

好的,感谢回复,我开始以为是读取缓存,并进行请求覆盖缓存

lishangjing-spec commented 6 months ago

@Suzhibin 您好,是否有快捷的方式,在获取缓存之后,异步立马进行缓存更新,用于下次启动时获取最新的数据,或则某个规则让其缓存更新。

目前我好像需要写两次的请求,处理两次 request 参数,才能刷新我的缓存

    // 请求
    [ZBRequestManager requestWithConfig:^(ZBURLRequest * _Nullable request) {
        request.apiType = ZBRequestTypeCache;
        ...
    } success:^(id  _Nullable responseObject, ZBURLRequest * _Nullable request) {
        if (request.isCache) {
            // 刷新缓存
            [ZBRequestManager requestWithConfig:^(ZBURLRequest * _Nullable request) {
                request.apiType = ZBRequestTypeRefreshAndCache;
                ....
            } failure:^(NSError * _Nullable error) {

            }];
        }
    }];
Suzhibin commented 6 months ago

@lishangjing-spec 你的方法看起来是两个请求,但其实第一个ZBRequestTypeCache ,只要有缓存,就不会走请求的,我只是把请求和获取缓存的方法进行了统一封装。你如果想要更简洁的写法可以参考下方,你可以在适合的时机调用。 [self requestList: ZBRequestTypeCache] [self requestList: ZBRequestTypeRefreshAndCache]

lishangjing-spec commented 6 months ago

@Suzhibin

是的,我阅读了源码,ZBRequestTypeCache ,只要有缓存,就不会走请求的,会直接 return 0;

因为我在过往写项目的时候我的场景是:

我没有去考虑调用接口对服务器的压力,我只希望前端的能给用户带来好的体验

我上面提供的代码,是对一个接口的处理,为了避免首次掉用两次请求,所以进行了 request.isCache 的判断,而在后续每次请求都会去刷新缓存,但是不去监听它的回调。

哈哈,这是我的描述,不知道描述的对不对,这个不是一个问题哈,只是想沟通下。