Używam AFNetworking do asynchronicznych wywołań do usługi WWW. Niektóre z tych połączeń muszą być połączone razem, gdy wyniki wywołania A są używane przez wywołanie B używane przez wywołanie C itd.Lepsza asynchroniczna kontrola z blokami Objective-C
AFNetwork obsługuje wyniki asynchronicznych wywołań z blokami sukcesu/awarii ustawionymi w czasie operacji jest tworzone:
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];
Powoduje to zagnieżdżone asynchroniczne bloki wywołań, które szybko stają się nieczytelne. Jest to jeszcze bardziej skomplikowane, gdy zadania nie są od siebie zależne i zamiast tego muszą być wykonywane równolegle, a wykonanie zależy od wyników wszystkich operacji.
Wydaje się, że lepszym podejściem byłoby zastosowanie schematu promises w celu oczyszczenia sterowania.
Znalazłem MAFuture, ale nie wiem, jak najlepiej zintegrować go z AFNetworking. Ponieważ połączenia asynchroniczne mogą mieć wiele wyników (sukces/niepowodzenie) i nie mają wartości zwracanej, nie wydaje się idealnym dopasowaniem.
Wszelkie wskazówki i pomysły będą mile widziane.
Dzięki za to pytanie - masz kilka świetnych odpowiedzi.Na początku miałem trochę problemów ze znalezieniem go i dotarłem tutaj, patrząc na obietnice. Ten anty-wzór może się zdarzyć w przypadku dowolnego asynchronicznego interfejsu API wywołania zwrotnego: nie jest on specyficzny dla AFNetworking. Użyłem wyszukiwania typu: "szeregowanie zagnieżdżonych blokowych wywołań zwrotnych". Może trochę więcej tagów może pomóc? To może być tylko ja! :-) – Benjohn