【发布时间】:2017-08-14 20:34:04
【问题描述】:
我需要在我的应用上执行一些异步网络任务。假设我需要从服务器获取 3 个资源,分别称为 A、B 和 C。假设在获取B 或C 之前,我必须先完成获取资源A。有时,我想先获取B,其他时候先获取C。
现在,我只有一个像这样的长链闭包:
func fetchA() {
AFNetworking.get(completionHandler: {
self.fetchB()
self.fetchC()
})
}
这暂时可行,但明显的限制是我已将执行顺序硬编码到 fetchA 的完成处理程序中。现在,假设我只想在fetchB 在完成处理程序中完成之后只使用fetchC,我将不得不为fetchB 更改我的实现...
基本上,我想知道是否有一些神奇的方法可以做类似的事情:
let orderedAsync = [fetchA, fetchB, fetchC]
orderedAsync.executeInOrder()
其中fetchA、fetchB 和fetchC 都是异步函数,但fetchB 在fetchA 完成之前不会执行等等。谢谢!
【问题讨论】:
-
不相关,但您可以考虑使用 Alamofire 而不是 AFNetworking。它出自同一作者之手,但却是一个 Swift 解决方案。但是你仍然需要做一些事情来处理异步任务,要么是 PromiseKit,要么是一些异步的
Operation子类来包装请求,或者类似的东西。 -
如果你确实留在了 AFNetworking,我为它做了一点
NSOperation包装器:github.com/robertmryan/AFHTTPSessionOperation
标签: ios swift asynchronous afnetworking