Я искал, но ничего не нашел. Возможно, это очень распространенная проблема в HTTP-запросах.
Я использую функцию amadeus.shopping.flightOffersSearch.get . Возвращенные результаты находятся в обработчике завершения либо в виде ошибки, либо в виде данных JSON. Однако, когда я вызываю эту функцию несколько раз (используя Timer и LoopRun ) для поиска нескольких пар исходный-целевой, некоторые из вызовов не были завершены: программа никогда не столкнулся с обработчиком завершения. Я думаю, что бы ни случилось, по крайней мере, должен выполняться обработчик завершения, чтобы я знал, какие ошибки возникают. Это обычное наблюдение для HTTP-запроса? или это ошибка в Amadeus API? или сервер API Amadeus иногда пропускает запросы? Или я что-то пропустил? Заранее спасибо!
Кстати, я знаю ограничение в 100 мс на скорость запроса. Вот почему я использовал Timer и LoopRun для отправки запроса.
[Обновление]
Я провел дополнительную отладку и обнаружил еще одну проблему. В исходном коде API выскакивала ошибка:
В процессе () Request.swift,
private func process(request: NSMutableURLRequest,
onCompletion: @escaping AmadeusResponse) {
let session = URLSession.shared
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
var amadeusResponse: Response?
var amadeusError: ResponseError?
if let httpResponse = response as? HTTPURLResponse {
// got a valid HTTP answer
amadeusResponse = Response(response: httpResponse, data: data!)
// Error could be either nil (200 OK) or enum value
amadeusError = amadeusResponse!.getErrorCode()
} else {
// no HTTP answer: network problem
amadeusResponse = nil
amadeusError = ResponseError.returnedError(error!)
}
onCompletion(amadeusResponse, amadeusError)
})
task.resume()
}
In process() of Request.swift,
Выскакивает ошибка "Thread 8: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
в строке amadeusResponse = Response(response: httpResponse, data: data!)
В это время возникает ошибка «Тайм-аут запроса». Однако код по-прежнему принудительно разворачивает data
, то есть nil
. По какой-то причине if let httpResponse = response as? HTTPURLResponse
не отсеивает этот сценарий ошибки.
Но это все еще не повторяет мое первоначальное наблюдение о том, что обработчик завершения не вызывается.