异步请求实现同步效果

开发的时候遇到一个需求就是希望达到微信拆红包的效果,请求发送以后需要等待数据返回以后才进行下一步如果一直不返回数据设定时间内就结束提示网络异常,使用的MKNetwork据说支持同步请求,但是没找到方法,找到了要改动封装好的请求也麻烦.

/**-----------------------思路---------------------**/

在等待过程中使用了MBProgressHUD不过他也是异步执行的,有个方法是showAnimated:<#(BOOL)#> whileExecutingBlock:<#^(void)block#> completionBlock:<#^(void)completion#> 他有两个block开始发请求的时候一个,完成后是一个,我的方法是在第一个block内部查看返回值,要是没有就等待0.1秒在查看一次,要是一直没有就超过2秒跳出条件循环,这样做就可以保证在第一个block里面得到返回值,在第二个block里面使用的时候有值,(有的文章是说在后台数据回来以后把要用到的地方比如view进行[self.tableView reloadData];重新刷新数据一次,但是这种效果我觉得不好,会先显示一个错误的信息),他的两个block也是异步的第一个发请求,不管回来没执行第二个block,我就是在第一个里面查看数据回来没有,没有就等一下再次查看,直到查看到数据(超时break)那么可以确保在第二个block一定能拿到数据.

/**-----------------------代码---------------------**/

[hud showAnimated:YES whileExecutingBlock:^{

//发送请求

int i = 0;

while (self.money == nil && i <25) {

i ++;

[NSThread sleepForTimeInterval:0.1];

}

} completionBlock:^{

//完成后执行的代码

}];

你可能感兴趣的:(异步请求实现同步效果)