Поиск предложений рейсов Amadeus не завершается sh [SWIFT API] Это ошибка? - PullRequest
0 голосов
/ 14 июля 2020

Я искал, но ничего не нашел. Возможно, это очень распространенная проблема в 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 не отсеивает этот сценарий ошибки.

Но это все еще не повторяет мое первоначальное наблюдение о том, что обработчик завершения не вызывается.

...