更新
而不是:
RACSignal * mergedItemsSignals = [RACSignal merge:itemSignalsArray];
生成这样的新信号:
RACSignal * mergedItemsSignals = [RACSignal merge:[itemSignalsArray.rac_sequence map:^id(RACSignal * signal) {
return [signal materialize];
}]];
当您订阅时,您希望使用RACEvents
来区分[RACEvent eventType]
。
对于一系列信号,我希望能够单独处理每个next
和每个error
。但我很难找到合适的运营商。到目前为止,似乎正确的选择是
merge
:
返回一个信号,该信号通过每个给定信号的值,并在所有信号完成时发送completed
。如果任何信号发送错误,则返回的信号会立即发送error
。
所以,似乎我需要类似的东西。我希望收到所有错误,但统一信号应该继续工作而不是完成第一个错误。
我也试过使用'combineLatest',但这只是在每个信号发送一些东西后转发事件,我想尽快开始转发每个信号。
希望它足够清楚,有人可以指出我正确的方向。 提前谢谢!
答案 0 :(得分:4)
信号只能出错一次,因此您需要一种方法将error
转换为next
s。幸运的是,materialize
就是这样 - 给定一个信号,它会从该信号中向您发出事件的信号。然后,您可以将其拆分为两个信号,用于错误和nexts,或者只是在一个块中处理它们。
因此,您可以获取信号列表,映射materialize
,然后合并生成的映射信号。
- (RACSignal *)mergeEvents:(NSArray *)signals {
return [RACSignal merge:[signals.rac_sequence map:^(RACSignal *signal) {
return [signal materialize];
}]];
}