网络速度慢或服务器宕机时如何处理Alamofire请求?

时间:2018-10-02 06:05:15

标签: ios swift alamofire response internet-connection

我是var clinic_id = $('#clinic_id_pricelist').val(); var url = "/my_url/route_name"; // <- CHANGE THIS TO THE CORRECT URL $.get(url, { id: clinic_id }, function (returnedData) { console.log(returnedData); }); 的新手,我正使用它来请求休息api。 现在,在发出请求时可能会有两个问题,我想知道如何使用Alamofire处理这些问题。

1)如果用户提交了数据并且Internet速度很慢并且需要更长的时间才能从服务器获得响应,该怎么办。在这种情况下,应如何确保请求是否成功。或者,我们可以向用户显示Internet速度慢的消息,以便他可以等待较长的响应。

2)如果互联网速度正常但服务器已关闭或者发送响应的时间更长,该如何在应用程序中处理这些情况呢?并保持数据的完整性。

以下是我如何使用Alamofire进行请求的示例。

Alamofire

2 个答案:

答案 0 :(得分:1)

您实际上是在正确实现alamofire,如果网络速度很慢,我早会遇到连接和服务器问题。尝试使用其他服务器上的其他端点来测试速度。如果速度更快,则问题出在服务器上。由于您的实现是正确的,那么肯定是服务器问题。如果问题出在服务器或连接上,alamofire与该问题无关。

答案 1 :(得分:0)

您可以增加响应缓慢的API调用的超时时间。

static func getUserListFromServer(completion: @escaping(Bool,[Users]?,String?)->() ){

let request = NSMutableURLRequest(url: APPURL.getFeedbackUserList)
request.httpMethod = "GET"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.timeoutInterval = 10 // change time out according to your need
let values = ["key": "value"]
request.httpBody = try! JSONSerialization.data(withJSONObject: values, options: [])

Alamofire.request(request as! URLRequestConvertible).responseJSON { (responseJson) in
    responseJson.result.ifSuccess {
        do {
            // Decode data to object
            let jsonDecoder = JSONDecoder()
            let root = try jsonDecoder.decode(Root.self, from: responseJson.data!)
            if let users = root.users{
                    completion(true,users,nil)
            }else{
                    completion(false,nil,"No users found.")
            }
        }
        catch let err {
            print(err.localizedDescription)
            completion(false,nil,err.localizedDescription)
        }
    }
    responseJson.result.ifFailure {
                completion(false,nil,responseJson.result.error?.localizedDescription)
    }
}
}