Objective c 如何合并多个信号并在第一个和下一个停止,但不在第一个错误时停止?
我有许多网络请求,其中一个或多个请求将返回有效数据,有些请求可能返回错误。我如何组合此请求以在第一个有效的返回数据后立即停止,但在出现错误时不停止 我试过这样做:Objective c 如何合并多个信号并在第一个和下一个停止,但不在第一个错误时停止?,objective-c,reactive-cocoa,Objective C,Reactive Cocoa,我有许多网络请求,其中一个或多个请求将返回有效数据,有些请求可能返回错误。我如何组合此请求以在第一个有效的返回数据后立即停止,但在出现错误时不停止 我试过这样做: [[RACSignal merge:@[sigOne, sigTwo, sigThree]] subscribeNext:^(RACTuple *myData){ NSLog(@"Data received"); } error:^(NSError *error) {
[[RACSignal merge:@[sigOne, sigTwo, sigThree]]
subscribeNext:^(RACTuple *myData){
NSLog(@"Data received");
} error:^(NSError *error) {
NSLog(@"E %@", error);
}
completed:^{
NSLog(@"They're all done!");
}
];
我的问题:
- 如果其中一个信号首先返回并出现错误,则不会发送下一个信号。不需要,因为其他信号之一将返回有效数据
- 如果所有三个都返回有效数据,那么subscribeNext将被调用三次,但我希望在获得一些有效数据后立即停止(以减少网络流量)
[[[[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
,而不会结束对其他信号的订阅。
通过添加repeat,如果没有发生next
事件(因为所有信号都出错),我们将获得再次运行的信号。
通过添加
take:1
,一旦收到单个下一个事件,信号将完成。谢谢你,伙计!这就是我要找的。如果所有信号都返回错误,有没有办法完成合并信号?是的,很简单,只需删除repeat方法。