Я использую AFNetworking для асинхронных вызовов в веб-службу. Некоторые из этих вызовов должны быть соединены вместе, где результаты вызова A используются вызовом B, которые используются вызовом C и т.д.
AFNetworking обрабатывает результаты асинхронных вызовов с кадрами успеха/отказа, установленными во время создания операции:
NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/public_timeline.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Public Timeline: %@", JSON);
} failure:nil];
[operation start];
Это приводит к вложенным блокам асинхронных вызовов, которые быстро становятся нечитаемыми. Это еще сложнее, когда задачи не зависят друг от друга и вместо этого должны выполняться параллельно, а выполнение зависит от результатов всех операций.
Похоже, что лучшим подходом было бы использовать фреймворк promises для очистки потока управления.
Я столкнулся с MAFuture, но не могу понять, как лучше всего интегрировать его с AFNetworking. Поскольку асинхронные вызовы могут иметь несколько результатов (успех/сбой) и не имеют возвращаемого значения, это не похоже на идеальное соответствие.
Любые указатели или идеи будут оценены.