![](/img/trans.png)
[英]Alamofire 4.0 RequestRetrier should(_,retry,with,completion) not being called
[英]Alamofire 5.0.0-rc.3 RequestInterceptor Adapt method not being called of Alamofire although retry gets called when there is any error in response
Alamofire 5.0.0-rc.3 RequestInterceptor Adapt 方法沒有被調用 Alamofire 雖然在響應中有任何錯誤時會調用重試。
方法:
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (AFResult<URLRequest>) -> Void) {
}
class Interceptor: RequestInterceptor {
func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (AFResult<URLRequest>) -> Void) {
print("ADAPT :=")
completion(.success(urlRequest))
}
func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) {
print("RETRY :=")
completion(.doNotRetry)
}
}
不同class中的網絡請求方法:
public func request<T: Codable> (_ urlConvertible: URLRequestConvertible) -> Observable<T> {
return Observable<T>.create { observer in
// 1
print("Url := \(urlConvertible.urlRequest!.url!)")
// 2
let request = AF.request(urlConvertible, interceptor: Interceptor()).responseDecodable { (response: AFDataResponse<T>) in
if let data = response.data{
print("Response := \(String(decoding: data, as: UTF8.self))")
}
else{
print("data is nil")
}
switch response.result {
case .success(let value):
print("value :-> \(value)")
observer.onNext(value)
observer.onCompleted()
case .failure(let error):
observer.onError(error)
}
}
//Finally, we return a disposable to stop the request
return Disposables.create {
request.cancel()
}
}
}
看這里:
https://github.com/Alamofire/Alamofire/issues/2998
由於存在歧義,因此未調用 function...
在攔截器中:
添加這個:
typealias AdapterResult = Swift.Result<URLRequest, Error>
並將“adapt”方法中的@escaping 參數替換為:
@escaping (RetryResult)
它應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.