我需要在我的应用上执行一些异步的网络任务。假设我有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