Web サービスへの非同期呼び出しに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と統合する最善の方法がわかりません。非同期呼び出しには複数の結果 (成功/失敗) があり、戻り値がない可能性があるため、理想的な適合とは思えません。
ポインタやアイデアをいただければ幸いです。