我正在使用AFNetworking进行对Web服务的异步调用。其中一些调用必须被链接在一起,即调用A的结果被调用B使用,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 集成。由于异步调用可能具有多个结果(成功/失败)并且没有返回值,因此它似乎不是一个理想的选择。
任何指针或想法都将不胜感激。