Как обработать запрос Alamofire, когда скорость сети низкая или сервер не работает? - PullRequest
0 голосов
/ 02 октября 2018

Я новичок в Alamofire, который я использую, чтобы сделать запрос на остальные API.Теперь при отправке запроса могут быть две проблемы, и я хочу знать, как решить эти проблемы, используя Alamofire.

1) Что если пользователь отправил данные, а Интернет работает медленно, и для получения ответа от него требуется больше времени?сервер.В таком случае, как следует убедиться, что запрос успешен или нет.Или мы можем показать пользователю сообщение о том, что интернет работает медленно, поэтому он может ждать длинного ответа.

2) Что если скорость интернета нормальная, но сервер не работает или отправка ответа занимает больше времени, как следуетмы обрабатываем эти ситуации в нашем приложении.И поддерживать целостность данных.

Ниже приведен пример того, как я использую Alamofire для выполнения запроса.

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

    Alamofire.request(APPURL.getFeedbackUserList, method: .get, parameters: nil, encoding: URLEncoding.queryString, headers: nil).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)
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы на самом деле правильно используете alamofire. Я бы уже говорил о проблеме с соединением и сервером, если скорость сети низкая.Попробуйте использовать другую конечную точку с другого сервера для проверки скорости. Если она быстрее, чем проблема на вашем сервере.Поскольку ваша реализация верна, то это определенно проблема с сервером.alamofire не имеет никакого отношения к решению проблемы, если проблема связана с сервером или соединением.

0 голосов
/ 02 октября 2018

Вы можете увеличить время ожидания для вызовов 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)
    }
}
}
...