Alamofire:如何只重试一次请求
Alamofire: How to retry request only once
我正在采用 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
但不起作用...有什么想法吗?
谢谢!
retryCount
是只读的。 retryCount
的描述是:
The number of times the request has been retried.
因此,您需要做的就是检查此重试次数,如果 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
.
我正在采用 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
但不起作用...有什么想法吗?
谢谢!
retryCount
是只读的。 retryCount
的描述是:
The number of times the request has been retried.
因此,您需要做的就是检查此重试次数,如果 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
.