Как повторно отправить URLRequest при неудачном завершении? - PullRequest
0 голосов
/ 01 мая 2019

Я не уверен, как повторно отправить URLRequest, если он не выполнен.

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

        let request = URLRequest(url: URL(string: urlNew)!)

        let session = URLSession.shared

        let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
            // other logic happens here
        })

Большую часть времени он проходит просто отлично, и все работает, как ожидалось. Как мне сделать так, чтобы он продолжал пробовать запрос, но в случае, если он не был успешным? Это делает это для "пусть задача ..." просто отлично, но это то, где он пойман. Для справки:

urlNew = "MyAPI String value is here"

1 Ответ

0 голосов
/ 01 мая 2019

Вы можете вызвать функцию рекурсивно, если запрос не выполнен

func callAPI(urlNew:String) {
    let request = URLRequest(url: URL(string: urlNew)!)

    let session = URLSession.shared

    let task = session.dataTask(with: request, completionHandler: {data, response, error -> Void in
        // other logic happens here
        guard let data = data, error == nil else {
            self.callAPI(urlNew:urlNew)
            return
        }
    })
    task.resume()
}
...