RACSignal抓住了自己?

时间:2016-09-12 10:22:12

标签: ios reactive-cocoa

我有一组代表某些服务器的对象。所有这些都应该回答某个Web请求。我需要查询其中一个(其中任何一个)并为此返回RACSignal,但如果失败,我需要转到列表中的下一个。如果我发出一个从数组中获取其中一个的信号试图发出请求,并且如果这个失败捕获自己尝试使用该列表中的另一个?

1 个答案:

答案 0 :(得分:0)

检查我的测试示例。我希望它对你有所帮助。

    RACSignal *signal1 = [RACSignal error:nil];
    RACSignal *signal2 = [RACSignal error:nil];
    RACSignal *signal3 = [RACSignal error:nil];
    RACSignal *signal4 = [RACSignal return:@5];

    NSArray<RACSignal *> *signals = @[signal1,
                                      signal2,
                                      signal3,
                                      signal4];

    NSMutableArray<RACSignal *> *catchedSignals = [NSMutableArray array];

    [signals enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(RACSignal * _Nonnull signal, NSUInteger idx, BOOL * _Nonnull stop) {
        RACSignal *catchedSignal = signal;
        if (idx != signals.count-1) {
            catchedSignal = [signal catchTo:catchedSignals.firstObject];
        }
        [catchedSignals insertObject:catchedSignal atIndex:0];
    }];

    [catchedSignals.firstObject subscribeNext:^(id x) {
        //print 5
        NSLog(@"x = %@", x);
    }];