运行 两个 Alamofire 请求顺序 Swift
Running Two Alamofire Requests in Sequence Swift
我正在使用 here 找到的异步库,以便在 运行 我来自 ViewDidLoad 的第二个请求之前等待第一个 alamofire 请求完成。该库似乎易于使用,但我永远无法等待第一个请求。我的代码如下:
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")
}
}
}
你的 getToken
看起来更像是:
func getToken(whenDone:(String?)->()) {
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)!
whenDone(token)
}
case .failure:
print ("error")
whenDone(nil)
}
}
}
并且调用序列变为:
getToken() { token ->
guard let token = token else {
return
}
getDevices()
}
我正在使用 here 找到的异步库,以便在 运行 我来自 ViewDidLoad 的第二个请求之前等待第一个 alamofire 请求完成。该库似乎易于使用,但我永远无法等待第一个请求。我的代码如下:
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")
}
}
}
你的 getToken
看起来更像是:
func getToken(whenDone:(String?)->()) {
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)!
whenDone(token)
}
case .failure:
print ("error")
whenDone(nil)
}
}
}
并且调用序列变为:
getToken() { token ->
guard let token = token else {
return
}
getDevices()
}