在异步中按顺序发起网络请求,并保证返回顺序一致

2018-08-25  本文已影响159人  天马行空得想法

在iOS开发当中我们有时候会碰到这样一个需求场景.例如有三个网络请求A,B,C.C这个网络请求需要等待A,B网络请求执行完并返回数据并拿着A,B两个网络请求的返回数据作为参数发起C的网络请求。小伙伴们一想到这个肯定是想着用dispatch_group_async()组函数。但是这样有个问题来了,发送网络请求是用的AFN发送的,是在block中获取数据。这样如何能保证A,B两个网络请求都接受到了数据才发起C的网络请求了。有个方法成功解决了这个问题。dispatch_group_enter(group)和dispatch_group_leave(group)方法,废话不多说上代码:

dispatch_group_t group = dispatch_group_create();
dispatch_queue_t globalQueue = dispatch_get_global_queue(0, 0);

dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
       // 网络请求A
      dispatch_group_leave(group);
    }];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
        // 网络请求B
        dispatch_group_leave(group);
    }];
});
dispatch_group_enter(group);
dispatch_group_async(group, globalQueue, ^{
   [self checkLogin:^{
        // 网络请求C
        dispatch_group_leave(group);
    }];
});

ok成功解决异步当中还有异步的问题,完美解决数据返回的顺序问题。

上一篇下一篇

猜你喜欢

热点阅读