iOS处理多个网络请求的先后(依赖)关系

Posted Felix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS处理多个网络请求的先后(依赖)关系相关的知识,希望对你有一定的参考价值。

ios开发中我们经常会遇到多网络请求的问题,有时候需要在一个网络请求结束之后再去请求另一个网络,其实最简单也是最low的方法就是在一个网络请求成功的回调中再去请求另外一个接口信息

使用信号量计数器来实现的代码如下:

static NSString *userSign;
static NSString *userId;

dispatch_group_t group = dispatch_group_create();
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);

dispatch_group_async(group, queue, ^{
    [[BFLoginService shareInstance] getImSignWith: @"gjs598"  complete:^(id  _Nonnull data, RequestError * _Nonnull error) {
        // 任务1
        NSLog(@"获取im签名完成%@", data[@"UserSig"]);
        userSign = data[@"UserSig"];
        dispatch_semaphore_signal(semaphore);
    }];
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});

dispatch_group_async(group, queue, ^{
    [[BFLoginService shareInstance] getImUserId:^(id  _Nonnull data, RequestError * _Nonnull error) {
        // 任务2
        NSLog(@"获取用户Id完成%@", data[@"userId"]);
        userId = data[@"userId"];
        dispatch_semaphore_signal(semaphore);
    }];
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
});

dispatch_group_notify(group, queue, ^{
    NSLog(@"啊啊啊啊啊啊%@ ----- %@", userId, userSign);
    // 任务1/任务2都完成了, 现在执行任务3
    [[V2TIMManager sharedInstance] login: userId userSig: userSign succ:^{
        // NSLog(@"id登陆成功");
        
        // @weakify(self)
         [[V2TIMManager sharedInstance] getConversationList: INT_MAX count: INT_MAX succ: ^(NSArray<V2TIMConversation *> *list, uint64_t lastTS, BOOL isFinished) {
             // @strongify(self)
             // [self updateConversation: list];
             NSLog(@"会话列表%@", list);
         } fail:^(int code, NSString *msg) {
             NSLog(@"拉取会话列表失败");
         }];
        
    } fail:^(int code, NSString *desc) {
        NSLog(@"id登陆失败了----------");
        NSLog(@"%@", desc);
    }];
});

以上是关于iOS处理多个网络请求的先后(依赖)关系的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 前端模块化的全面总结

java程序中的流都要统统关闭吗?有没有先后顺序??

jmeter之有依赖关系的接口处理

读写锁 与 互斥锁

前端开发方法论总结

静态库链接时的依赖关系和先后顺序