时间:2021-05-02
IOS开发中异步网络请求上实现同步逻辑
前提:
可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错。
之前ASI的网络库中是有同步请求的接口,所以很好处理,AFNetwork的网络库只有异步的网络请求,该怎么实现呢?
1.循环异步拼组
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger)count completeBlock:(uploadCompleteBlock)block { FNCircleImage *aTCImage = imageArray[index]; NSString *filepath = aTCImage.localFilePath; [self.resourceManager upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) { if (error == nil) { aTCImage.remoteUrl = urlString; NSInteger idx = index + 1; if (idx >= count) { block(nil); } else { [self uploadFile:imageArray atIndex:idx imagesCount:count completeBlock:block]; } } else { block(error); } }]; }2.信号量异步转同步
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 __block NSError *e = nil; [imageArray enumerateObjectsUsingBlock:^(NSString *filePath, NSUInteger idx, BOOL * _Nonnull stop) { __block dispatch_semaphore_t t = dispatch_semaphore_create(0); [self upload:filepath progress:nil completion:^(NSString * _Nullable urlString, NSError * _Nullable error) { if (error == nil) { } else { e = error; *stop = YES; } dispatch_semaphore_signal(t); }]; dispatch_semaphore_wait(t, DISPATCH_TIME_FOREVER); }];3.NSOperationQueue可控队列
1).继承NSOperation实现上传逻辑,完成发出通知或者block回调
2).用上传数据创建Operation数组,加入NSOperationQueue中执行
3).根据完成回调的结果和个数判断结果,如果中间有失败,可以关闭未执行的Operation
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
jquery中ajax方法有个属性async用于控制同步和异步,默认是true,即ajax请求默认是异步请求,有时项目中会用到AJAX同步。这个同步的意思是当J
初次使用$.ajax(),我没有去区分过ajax的异步请求和同步请求的不同,刚开始使用同步请求,以至后来出现许多问题,特别在体验度方面。异步和同步:同步意味着执
现在应该大部分公司都是前后端分离了。so,数据请求的封装还是必须的。为了实现向ios中block封装请求的异步的效果,我采用JavaScript中promise
同步时序逻辑电路与异步时序逻辑电路的区别如下: 1、核心逻辑不同 异步电路电路的核心逻辑是组合电路,比如异步的FIFO/RAM读写信号、地址译码信号等电路。
一、多线程环境下的同步与异步同步:A线程要请求某个资源,但是此资源正在被B线程使用中,因为同步机制存在,A线程请求不到,怎么办,A线程只能等待下去。packag