我想并行启动多个独立的网络请求,并在所有请求完成后订阅(我不在乎它们是否完成或出错)。
现在,我使用 combineLatest
。因此,这些请求是并行进行的(如我所愿),但是当信号发送error
时,订阅发生错误。
我找不到允许我并行启动多个独立请求并听完所有操作的运算符。
真诚的
编辑
在其他情况下(需要单独使用信号),我需要订阅错误。所以我仍然需要我的信号才能sendError:
。
我的用例是这样的:
一方面,我有一个可以进行完全同步的应用程序。这将启动所有独立请求。我需要知道何时完成所有请求才能关闭progressHUD。我不在乎我的信号是否完成了sendError
或sendCompleted
。
但是另一方面,我有多个按钮,可以分别重新启动每个请求,在这种情况下,我需要告诉用户信号是成功还是失败。
最佳答案
我使用catch
运算符给出了一个答案:
我将catch
RAC运算符添加到所有信号中,以防信号失败生成新的[RACSignal empty]
:
NSArray* allSignals = @[signal1, signal2, signal3, signal4];
NSMutableArray* optionalSignals = [NSMutableArray array];
for (RACSignal* signal in allSignals) {
RACSignal* catchableSignal = [signal catch:^RACSignal *(NSError *error) {
return [RACSignal empty];
}];
[optionalSignals addObject:catchableSignal];
}
return [RACSignal combineLatest:optionalSignals];
这不会改变我的单个信号的性质,我受益于
combineLatest
功能。编辑
如果有人有更优雅的RAC方法来处理for ... in循环,我仍然很感兴趣。
关于ios - 活性 cocoa -如何并行处理多个独立信号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38391338/