Я относительно новичок в ReactiveCocoa и задавался вопросом, как объединить последовательность вызовов REST GET, чтобы они выполнялись по порядку. Если одна из ошибок звонков, то весь процесс откатится.Цепочка RACSignals и откат
Так что я использую pod 'AFNetworking-RACExtensions', '0.1.1' У меня есть NSArray сигналов. Большинство из этих сигналов выглядит следующим образом:
- (RACSignal *) form
{
@weakify(self);
RACSubject *repSubject = [RACSubject subject];
[[ServiceClient getForm] subscribeNext:^(RACTuple *jsonTuple) {
if ([jsonTuple second])
{
// create core data objects here
[repSubject sendNext: nil];
[repSubject sendCompleted];
}
} error:^(NSError *error) {
[repSubject sendError: error];
}];
return repSubject;
}
Так нагрузка сигналов, как это есть в NSArray. Я хочу обрабатывать эти вызовы в том порядке, в котором они появляются в массиве один за другим, и иметь общий обработчик ошибок и блок завершения. Я думаю, что я имел успех не используя NSArray и имел такой код:
@weakify(self);
[[[[[[self form] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal2];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal3];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal4];
}] flattenMap:^(id value) {
// perform your custom business logic
@strongify(self);
return [self signal5];
}] subscribeError:^(NSError *error) {
@strongify(self);
[self handleError: error];
} completed:^{
// Successful Full Sync
// post notification
}];
Как я могу сделать все это с помощью NSArray сигналов, все еще будучи в состоянии использовать subscribeError и завершил блоки?
Я предполагаю, что это что-то вроде:
@weakify(self);
[[[array.rac_sequence flattenMap:^RACStream *(id value) {
// dunno what to do
}] subscribeError:^(NSError *error) {
@strongify(self);
[self handleError: error];
} completed:^{
// Successful Full Sync
// post notification
}];
Блестящий, что, похоже, хорошо работает, спасибо. Это довольно сложная первая строка, могу ли я попросить более подробно о том, что там происходит? Кроме того, если каждый сигнал будет когда-либо возвращать нуль, может ли вызов subscribeNext быть устранен в вашем решении? – elprl
Спасибо за редактирование. Мощный материал. – elprl