Alamofire网络请求在添加完成块之前被触发?

时间:2016-08-01 06:46:53

标签: swift alamofire

我是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(...方法将完成调用添加回某个队列。启动回调块是不是太迟了,因为请求已经被解雇了?通常情况下,我们总是在完成设置之后才发出请求,不是吗?

然而,在查尔斯的监督下,我发现只有在.responseJSON方法返回后才发出Alamofire请求。

所以,请告诉我,我是如何误解Alamofire的逻辑的。 谢谢!

2 个答案:

答案 0 :(得分:0)

你这样试试怎么样?

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
                 }
         }

答案 1 :(得分:0)

在返回响应之前,完成处理程序没有用处。当响应返回时,Alamofire会自动调用处理程序。如果在响应返回后添加了处理程序,Alamofire会立即调用处理程序(这就是为什么你可以随时添加多个处理程序,它们都将被调用)。