记录iOS 同步请求问题

2018-10-10  本文已影响0人  able要爆了

遇到个需求,就是一个动作需要请求几个接口才能完成(都只是查询动作,但是需要根据顺序去请求),平时上网随便看看别人写的基础知识,看到一篇GCD的文章,刚好看到信号量那一部分,决定使用信号量去解决这一个问题。。。

直接贴代码:

    __block dispatch_semaphore_t sem = dispatch_semaphore_create(0);

    // 创建队列

    dispatch_queue_t queue = dispatch_queue_create("requestBlock", NULL);

    dispatch_async(queue, ^{

        [self.webservice verifyPhoneSMSWithPhoneNum:self.privateAccountModel.mobilephone VerifyCode:self.privateAccountModel.authcode Complete:^(ASResponse * response) {

            if (response.isOpSuccess) {

                //成功之后的处理

            }else{

                [Toast showError:[response.error.userInfo objectForKey:NSLocalizedDescriptionKey]];

            }

            //信号量加1

            dispatch_semaphore_signal(sem);

        }];

// 只要信号量值不大于等于1,就会一直等待(-1)

        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    });

    dispatch_async(queue, ^{

        [self.webservice getBankAccountTypeWithBankAccount:privateAccount[@"bankaccount"] Complete:^(ASResponse * response) {

            if (response.isOpSuccess) {

                //            _debit_credit_flag = response.

                [self checkCertificationWithPrivateParam:param bankCardType:[response.mapData[@"debit_credit_flag"] longValue]];

            }else{

                [Toast showError:[response.error.userInfo objectForKey:NSLocalizedDescriptionKey]];

            }

            dispatch_semaphore_signal(sem);

        }];

        // 只要信号量值不大于等于1,就会一直等待

        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    });

//请求完之后再作统一处理

    dispatch_async(queue, ^{

        dispatch_async(dispatch_get_main_queue(), ^{

            [Toast done];

        });

    });

引用:https://blog.csdn.net/li15809284891/article/details/55097366

记录一下,以后再上来看看,作为菜鸟的我,要继续努力。

上一篇 下一篇

猜你喜欢

热点阅读