Alamofire: как повторить запрос только один раз
Я усыновляю RequestAdapter
а также RequestRetrier
автоматически добавлять поведение маркера обновления в мой запрос. Проблемы, которые повторяются, возникают бесконечно без контроля. У меня есть этот код:
class AuthHandler: RequestAdapter, RequestRetrier {
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
return urlRequest
}
public func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 401 {
_ = Credential.current.renew({ (credential, error) in
completion(true, 0.0) /// Retry request
})
} else {
completion(false, 0.0) // Don't retry
}
}
}
Как я могу повторить запрос только один раз после сбоя?
Я попробовал это:
request.retryCount = 1
но не работает... Есть идеи?
Спасибо!
1 ответ
retryCount
только для чтения. Описание для retryCount
является:
Сколько раз запрос был повторен.
Итак, все, что вам нужно сделать, это проверить этот счетчик повторений и прекратить повторные попытки, если retryCount
слишком высоко
Чтобы остановить после одной попытки, этот код будет работать:
class AuthHandler: RequestAdapter, RequestRetrier {
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
return urlRequest
}
public func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) {
guard request.retryCount == 0 else { return completion(false, 0) } // relevant change
if let response = request.task?.response as? HTTPURLResponse, response.statusCode == 401 {
_ = Credential.current.renew({ (credential, error) in
completion(true, 0) /// Retry request
})
} else {
completion(false, 0.0) // Don't retry
}
}
}
Примечание. При первой попытке запроса его retryCount
равно 0. В нашем коде выше мы проверяем, что это только при первой же попытке, где retryCount == 0
,