我有许多网络请求,其中一个或多个会返回有效数据,有些可能会返回错误。如果第一个有效数据返回数据但如果发生错误则不能停止,如何将此请求组合停止。
我试过这样:
[[RACSignal merge:@[sigOne, sigTwo, sigThree]]
subscribeNext:^(RACTuple *myData){
NSLog(@"Data received");
} error:^(NSError *error) {
NSLog(@"E %@", error);
}
completed:^{
NSLog(@"They're all done!");
}
];
我的问题:
答案 0 :(得分:2)
试试这个:
[[[[RACSignal merge:@[[sigOne catchTo:[RACSignal empty]],
[sigTwo catchTo:[RACSignal empty]],
[sigThree catchTo:[RACSignal empty]]]]
repeat] take:1]
subscribeNext:^(RACTuple *myData){
NSLog(@"Data received");
} error:^(NSError *error) {
NSLog(@"E %@", error);
}
completed:^{
NSLog(@"They're all done!");
}
];
通过使用catchTo:
,当信号发生错误时,信号将被空信号替换,这只会导致信号发送complete
,并且不会终止每个其他信号的订阅。
通过添加重复,如果没有next
事件发生(因为所有信号都出错),我们将再次运行信号。
通过添加take:1
,信号将在收到单个next
事件后完成。