• iOS 使用局部block处理接口依次调用需求


    开发中接口偶尔也会遇到接口数据依赖的问题,比如接口二需要接口一返回的某个回参作为入参才能请求,这时就需要等接口一请求完成在去调用接口二。一般都是使用信号量、GCD等。

    遇到这种问题博主一般都是使用信号量。如下发

    __block dispatch_group_t group = dispatch_group_create();
    dispatch_group_enter(group);
    NSDictionary *arguments = @{@"type":@(1)};
    [Network JSON_POST:arguments view:self.view prefix:@"" funItem:@"" success:^(NSDictionary * _Nonnull response){
        dispatch_group_leave(group);
    } error:^(NSDictionary * _Nonnull response) {
    } failure:^{
    }];
    dispatch_group_notify(group, dispatch_get_main_queue(), ^{
        
    });
    

    或者使用下面的嵌套地狱,优点是很直观的解决了问题,缺点是如果只有两层嵌套还好,当多的时候能让人看的头皮发麻,后期维护麻烦还容易被喷。

    //接口一
    [Network requestData:^{
       //接口二
       [Network requestData2:^{
       } error:^{
           !error ?: error();
       }];
    } error:^{
       !error ?: error();
    }];
    

    然后想到了局部的block,block是可以写在方法内的,同时block看着更直白,方便。

    - (void)viewDidLoad {
        [super viewDidLoad];
        void (^requestData3)(NSString *value) = ^(NSString *value){
           // 接口3
           [Network request:@{@"data3":value} success::^{
               //三个接口依次请求完成
               success();
           } failure:^{
               failure();
           }];
        };
    
    
        void (^requestData2)(NSString *value) = ^(NSString *value){
           // 接口2
           [Network request:@{@"data2":value} success::^{
               // 所有接口请求成功
               requestData3(@"调用data3");
           } failure:^{
               failure();
           }];
        };
        [Network request:@{@"data1":@"a"} success:^{
           // 接口1
          requestData2(@"调用data2");
    
        } failure:^{
           failure();
        }];
    }
    
  • 相关阅读:
    Java流程控制,用户交互scanner和运算结构
    Day14_Date类
    Day14_BigDecimal的使用
    Day14_StringBuffer和StringBuilder
    Day14_String概述
    装箱、拆箱面试题
    Day14_类型转换与装箱、拆箱
    简单的银行小案例
    Day12_面向对象 异常处理机制
    Day12_面向对象 异常机制
  • 原文地址:https://www.cnblogs.com/huanghaipo/p/14587588.html
Copyright © 2020-2023  润新知