【问题标题】:Alamofire network request fired before adding completion block?在添加完成块之前触发 Alamofire 网络请求?
【发布时间】:2023-03-24 14:48:01
【问题描述】:

我是 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成功时是同一个登录

标签: swift alamofire


【解决方案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
                     }
             }
    

    【讨论】:

      最近更新 更多