【发布时间】:2017-12-21 08:26:34
【问题描述】:
我正在使用找到here 的异步库来等待第一个 alamofire 请求完成,然后再从 ViewDidLoad 运行我的第二个请求。该库似乎易于使用,但我永远无法获得等待的第一个请求。我的代码如下:
let group = AsyncGroup()
group.utility
{
self.getToken()
}
group.wait()
self.getDevices()
我希望 getToken 函数在继续执行 getDevices 请求之前完成 Alamofire 请求及其完成处理程序。两者都是非常简单的 Alamofire 请求。
编辑:
这是 getToken 请求。在调用第二个 alamofire 请求之前,token 变量没有更新为 alamofire 响应。
func getToken()
{
let httpheader: HTTPHeaders =
[
"Content-Type": "application/json"
]
// Dev
let param = [params here]
Alamofire.request("url", method: .post, parameters: param, encoding: JSONEncoding.default, headers:httpheader).validate()
.responseData { response in
switch response.result {
case .success:
if let data = response.data {
let xml = SWXMLHash.parse(data)
token = (xml["authResponse"] ["authToken"].element?.text)!
}
case .failure:
print ("error")
}
}
}
【问题讨论】:
-
responseData 在将要在稍后日期(网络操作完成时)执行的块排队之后立即返回,因此将 getToken 调用包装在 AsyncGroup 中确实对您没有任何帮助。它只是同步 getToken 调用本身的返回。
-
没关系,我希望第一个 alamofire 请求立即加载并执行。我只想等待第二个请求。
-
最简单的方法是在第一个的 .responseData 回调中启动第二个请求。
标签: swift asynchronous alamofire grand-central-dispatch