在添加完成块之前触发 Alamofire 网络请求?
Posted
技术标签:
【中文标题】在添加完成块之前触发 Alamofire 网络请求?【英文标题】:Alamofire network request fired before adding completion block? 【发布时间】:2016-08-01 06:46:53 【问题描述】:我是 Alamofire 的新手,它的逻辑对我来说有点混乱。 我怀疑 Alamofire 是否总是仅在该请求触发后才添加完成处理程序。 例如,这里是来自Alamofire Github 的用法示例。
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value
print("JSON: \(JSON)")
在.request(.GET...
方法中,请求本身被恢复然后返回。在那之后,返回的请求然后调用.responseJSON(...
method 将完成调用添加回某个队列。由于请求已经触发,因此启动回调块是否为时已晚?通常我们总是在完全设置好之后才触发请求,不是吗?
但是,在 Charles 的监督下,我发现 Alamofire 请求只有在 .responseJSON
方法返回后才发出。
那么,请告诉我我是如何误解 Alamofire 的逻辑的。 谢谢!
【问题讨论】:
在jquery成功时是同一个登录 【参考方案1】:在响应返回之前,完成处理程序没有用处。当响应返回时,Alamofire 会自动调用处理程序。如果在响应返回后添加处理程序,Alamofire 会立即调用处理程序(这就是为什么您可以随时添加多个处理程序,它们都会被调用)。
【讨论】:
【参考方案2】:你试试这样怎么样?
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseJSON response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
let result = response.result
switch result
case .Success(let data):
let json = JSON(data)
completed(JSONObject: json, error: nil)
break
case .Failure(let error):
completed(JSONObject: nil, error: error)
break
【讨论】:
以上是关于在添加完成块之前触发 Alamofire 网络请求?的主要内容,如果未能解决你的问题,请参考以下文章