一个页面多个网络请求依赖调用的问题

iOS 码拜 4年前 (2016-03-24) 320次浏览
本人现在有一个比较复杂的问题,一个页面里面有挺多个网络请求(先不要管为什么服务器端封装成一个API下发下来)
-(void)A;
-(void)B;
-(void)C;
-(void)D;
其中
函数A没有依赖
函数B依赖函数A
函数C没有依赖
函数D依赖于函数C跟B
本人应该以一种什么样的方式(或技术)去处理上面的关系呢?
原因是每个函数都可能被单独出发(就是按钮出发),所以关于SV提示的应该也要考虑在内。
////////////////////////////////////////////////////////////////////////////////
例如A函数定义如下
-(void)A
{
[SVProgressHUD showWithStatus:@”套餐获取中…”];

NSString *urlstring = [NSString stringWithFormat:@”%@%@”,SERVER_URL,@“/xxx/xxx”];
id session = [NetWorkUikits requestWithUrl:urlstring param:nil completionHandle:^(id data) {
if([data[@”success”] isEqualToNumber:@YES])
{
[SVProgressHUD dismiss];
}
else
{
[SVProgressHUD showErrorWithStatus:data[@”message”]];
}

} failureHandle:^(NSError *error) {

[SVProgressHUD showErrorWithStatus:@”连接网络失败,请检查网络”];
}];
}

解决方案

100

本人实现一个任务队列,页面进入时先push任务1(调用方法A),等待方法A的结果返回以后,pop任务1,同时push任务2(调用方法B),等结果返回以后 pop队列,直到队列中任务数为0。 在百度地图操作的时候经常有这样的调用,例如先加载地图,等地图加载完成以后,再设置缩放级别等等

50

 [_taskQueue pushTask:^(NSObject * _Nonnull arg) { //同步数据库

[siteSyncSvc sync:^{
[_taskQueue popAndExcuteTask]; //成功继续下一个任务
} onFail:^(NSString *error) {
[_taskQueue terminateTask]; //失败,中止队列并清除队列中的全部任务
}];
} parameter:@”NC”];

[_taskQueue pushTask:^(NSObject * _Nonnull arg) {

} parameter:@”NC”];

[_taskQueue popAndExcuteTask];

50

可以参考NSOperation& NSOperationQueue
NSOperation可以指定依赖关系~

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个页面多个网络请求依赖调用的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)