Besser asynchrone Ablaufsteuerung mit Objective-C blocks

Ich bin mit AFNetworking für asynchrone Aufrufe an eine web service. Einige dieser Aufrufe müssen in Reihe geschaltet werden, wobei die Ergebnisse von call-A-by-call B die verwendet werden, durch aufrufen von C, etc.

AFNetworking Griffe Ergebnisse der asynchronen Aufrufe mit Erfolg/Misserfolg Blöcke auf die Zeit der operation erstellt:

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];

Diese Ergebnisse in geschachtelte async-Aufruf blockiert schnell unlesbar wird. Es ist sogar noch komplizierter, wenn die Aufgaben nicht voneinander abhängig, sondern müssen parallel ausgeführt werden und die Ausführung hängt von den Ergebnissen aller Vorgänge.

Es scheint, dass der bessere Ansatz wäre die Nutzung einer verspricht framework zu bereinigen, die Ablaufsteuerung.

Denen ich begegnet bin MAFuture aber kann nicht herausfinden, wie man am besten zu integrieren, Sie mit AFNetworking. Da der asynchrone Aufrufe könnten mehrere Ergebnisse (Erfolg/Misserfolg) und nicht über eine return-Wert es scheint nicht, wie eine ideale Passform.

Irgendwelche Hinweise oder Ideen würde geschätzt.

  • Vielen Dank für diese Frage – Sie haben einige gute Antworten. Ich hatte ein wenig Mühe, es zu finden, zunächst aber, und habe hier über die Suche zu Versprechen. Dieses anti-pattern passieren kann, für alle asynchronen callback-API: es ist nicht AFNetworking bestimmten. Ich wurde durch eine Suche so etwas wie: "serialising verschachtelten block Rückrufe". Vielleicht ein paar mehr tags helfen könnte? Es könnte nur sein, mich aber! 🙂
InformationsquelleAutor bromanko | 2012-06-06
Schreibe einen Kommentar