需求:公司當前的項目有一個頁面是需要兩個請求并發(fā)陈莽,且都成功后才算整個界面的數(shù)據請求成功
思路:首先想到的就是用dispatch_group,可寫好后dispatch_notify并未等請求的block都執(zhí)行完后才走镀迂,后就定義了個bool屬性欺劳,采用kvo的方式實現(xiàn)了菌赖,事后還是感覺不是很好唬滑,就又找了些資料澈圈,經實踐dispatch_group的enter group和leave group可實現(xiàn)需求
關鍵代碼如下
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
//request
? ? ? ?[self requestPropertiesWithParams:skuParams success:^() {
? ? ? ? ? ? dispatch_group_leave(group);
? ? ? ?} failed:^(NSString *errMsg) {
? ? ? ? ? self.isFailed = YES;
? ? ? ? ?dispatch_group_leave(group);
? ? ?}];
});
dispatch_group_enter(group);
dispatch_group_async(group, queue, ^{
? ? ? ? [self requetGoodsPropertiesDetailWithParams:skugoodsParams ? ? ? ? ? ? ? ? ? ? ? ? success:^() {
? ? ? ? ? ? ? dispatch_group_leave(group);
? ? ? ?} failed:^(NSString *errMsg) {
? ? ? ? ? ? self.isFailed = YES;
? ? ? ? ? ? ?dispatch_group_leave(group);
? ? ? }];
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
? ? ? ? ? if (self.isFailed == YES) {
? ? ? ? ? ? ? ? ? if (self.requestFailedBlock) {
? ? ? ? ? ? ? ? ? ? ?self.requestFailedBlock(@"請求失敗");
? ? ? ? ? ? ? ? }
? ? ? ? ? ?}else{
? ? ? ? ? ? ? ? ? [self filterData];
? ? ? ? ? ? ? ? ?HLGoodsDetailModel *model =? [self ? ? ? ? ?getNewModel:self.goodsDetailModel];
? ? ? ? ? ? ? ?[self.itemsDict setObject:model forKey:fileName];
? ? ? ? ? ? ? ?if (self.requestSuccessBlock) {
? ? ? ? ? ? ? ? ? ? self.requestSuccessBlock(model);
? ? ? ? ? ? ? ?}
? ? ? ?}
});