Alamofire 提供了一个重试拦截器 RetryPolicy,可以针对特定状态码重试,还可以限制重试次数。
多次重试时,并不是失败了就立即重试,而是有一个指数延迟算法。
RetryPolicy 使用流程
首先看 RetryPolicy 的初始化方法:
/// retryLimit: 重试次数 |
重试 retry 方法
open func retry(_ request: Request, |
如果需要自己定义重试方式,可以继承字 RetryPolicy,重写 retry 方法。
验证请求
其中需要注意一点的是,如果要针对 http 状态码重试,需要设置 Request 的 validate:
extension DataRequest { |
在请求完成时,如果未发生错误,会针对 validators 验证,验证不通过会抛出错误。
当有错误抛出时,才会继续走重试流程。
如果结合使用 Moya 的话,指定成功验证类型即可:
extension TargetType { |
func sendRequest(_ target: Target, request: URLRequest, callbackQueue: DispatchQueue?, progress: Moya.ProgressBlock?, completion: @escaping Moya.Completion) -> CancellableToken { |