我需要在我的應用上執行一些異步的網絡任務。假設我有3個資源需要從服務器獲取,請撥打A
,B
和C
。假設我在取得B
或C
之前必須首先完成獲取資源A
。有時候,我想先取B
,其他時候先取C
。按順序快速執行異步任務
現在,我只是有一個長鏈閉合,像這樣:
func fetchA() {
AFNetworking.get(completionHandler: {
self.fetchB()
self.fetchC()
})
}
這適用於現在,但明顯的限制是我硬編碼的執行順序到完成處理程序fetchA
。現在,說我只想fetchC
fetchB
後,在完成處理程序已經完成,我不得不去改變我的fetchB
實現...
從本質上講,我想知道是否有一些神奇的方式做是這樣的:
let orderedAsync = [fetchA, fetchB, fetchC]
orderedAsync.executeInOrder()
其中fetchA
,fetchB
和fetchC
都是異步的功能,但fetchB
不會執行,直到fetchA
已經完成等等。謝謝!
不相關,但您可能會考慮使用Alamofire而不是AFNetworking。它是由同一作者撰寫的,但是是一個Swift解決方案。但是你仍然需要做一些事情來處理異步任務,PromiseKit,一些異步操作子類來封裝請求,或者類似的東西。 – Rob
如果你確實留在AFNetworking中,我爲它做了一個'NSOperation'包裝:https://github.com/robertmryan/AFHTTPSessionOperation – Rob