在添加完成块之前触发 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 网络请求?的主要内容,如果未能解决你的问题,请参考以下文章

等待多个 Alamofire 请求完成

在完成之前中止 Alamofire 下载请求

alamofire 请求完成后更新 tableview

在 iOS 应用程序终止时处理 Alamofire 请求

Alamofire RequestRetrier,在主操作队列上调用完成块可以吗?

将带有完成处理程序的 Firebase IdToken 添加到每个 AlamoFire 请求