我正在使用AFNetworking來異步調用Web服務。其中一些呼叫必須鏈接在一起,其中呼叫A的結果由呼叫B使用,由呼叫C使用,等等。使用Objective-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整合。由於異步調用可能有多個結果(成功/失敗),並且沒有返回值,因此它看起來不太合適。
任何指針或想法,將不勝感激。
感謝這個問題 - 你有一些很好的答案。儘管我最初找到了一點麻煩,但通過查看承諾來到這裏。這種反模式可能發生在任何異步回調API上:它不是AFNetworking特定的。我正在使用搜索:「序列化嵌套塊回調」。也許更多的標籤可以幫助?但它可能只是我! :-) – Benjohn