OC異步請(qǐng)求不嵌套

最近在學(xué)JS,發(fā)現(xiàn)使用JS的Promise寫(xiě)多個(gè)異步請(qǐng)求不需要嵌套,挺友好。所以就想研究下OC有沒(méi)對(duì)應(yīng)的方式。

OC的話可以通過(guò)ReactObj這個(gè)庫(kù)來(lái)實(shí)現(xiàn)。ReactObj主要是為了實(shí)現(xiàn)MVVM而生的,通過(guò)信號(hào)控制一切。

1、先定義三個(gè)異步請(qǐng)求函數(shù)
接口2依賴(lài)接口的結(jié)果,接口3依賴(lài)接口2的結(jié)果。

//接口1
- (void)fetchData1:(void(^)(BOOL ret, NSString *userid))callBack{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [NSThread sleepForTimeInterval:2];
        dispatch_async(dispatch_get_main_queue(), ^{
            if(callBack) callBack(YES,@"65432");
        });
    });
}
//接口2依賴(lài)接口1返回的userid
- (void)fetchData2:(NSString *)userid callBack:(void(^)(BOOL ret,NSString *userid))callBack{
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [NSThread sleepForTimeInterval:1];
        dispatch_async(dispatch_get_main_queue(), ^{
            if(callBack) callBack(YES,@"00000");
        });
    });
}

//接口3依賴(lài)接口2的結(jié)果
- (void)fetchData3:(NSString *)userid callBack:(void(^)(BOOL ret))callBack{
    
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [NSThread sleepForTimeInterval:2];
        dispatch_async(dispatch_get_main_queue(), ^{
            if(callBack) callBack(NO);
        });
    });
}

2、把三個(gè)接口轉(zhuǎn)換成signal

- (RACSignal *)creatFetchData1Signal{
    NSLog(@"start fetchData1");
    return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [self fetchData1:^(BOOL ret, NSString *userid) {
            if(ret){
                [subscriber sendNext:userid];
            }else{
                [subscriber sendError:nil];
            }
            [subscriber sendCompleted];
        }];
        return nil;
    }];
}

- (RACSignal *)creatFetchData2Signal:(NSString *)userid{
    NSLog(@"start fetchData2 param>>>>%@",userid);
    return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [self fetchData2:userid callBack:^(BOOL ret, NSString *userid) {
            if(ret){
                [subscriber sendNext:userid];
            }else{
                [subscriber sendError:nil];
            }
            [subscriber sendCompleted];
        }];
        return nil;
    }];
}

- (RACSignal *)creatFetchData3Signal:(NSString *)userid{
    NSLog(@"start fetchData3 param>>>>%@",userid);
    return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [self fetchData3:userid callBack:^(BOOL ret) {
            if(ret){
                [subscriber sendNext:@(ret)];
            }else{
                [subscriber sendError:nil];
            }
            [subscriber sendCompleted];
        }];
        return nil;
    }];
}

3、使用signal

    [[[[self creatFetchData1Signal] flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {
        return [self creatFetchData2Signal:value];
    }]flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {
        return [self creatFetchData3Signal:value];
    }]subscribeNext:^(id  _Nullable x) {
        NSLog(@"ret==%@",x);
    } error:^(NSError * _Nullable error) {
        NSLog(@"error");
    } completed:^{
        NSLog(@"completed");
    }];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,660評(píng)論 4 61
  • 用到的組件 1、通過(guò)CocoaPods安裝 2、第三方類(lèi)庫(kù)安裝 3、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶(hù)反饋 ...
    SunnyLeong閱讀 15,205評(píng)論 1 180
  • 字符串 1.什么是字符串 使用單引號(hào)或者雙引號(hào)括起來(lái)的字符集就是字符串。 引號(hào)中單獨(dú)的符號(hào)、數(shù)字、字母等叫字符。 ...
    mango_2e17閱讀 7,835評(píng)論 1 7
  • 《閉上眼睛才能看清楚自己》這本書(shū)是香海禪寺主持賢宗法師的人生體悟,修行心得及講學(xué)錄,此書(shū)從六個(gè)章節(jié)講述了禪修是什么...
    宜均閱讀 10,354評(píng)論 1 25
  • 前言 Google Play應(yīng)用市場(chǎng)對(duì)于應(yīng)用的targetSdkVersion有了更為嚴(yán)格的要求。從 2018 年...
    申國(guó)駿閱讀 66,221評(píng)論 15 98

友情鏈接更多精彩內(nèi)容