- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一种重试机制,我看到 alamofire 有一个。我正在尝试实现一个简单的重试机制,并指定请求的次数,但出现了问题。
class OAuth2Handler: RequestAdapter, RequestRetrier {
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
return urlRequest
}
var defaultRetryCount = 4
private var requestsAndRetryCounts: [(Request, Int)] = []
private var lock = NSLock()
private func index(request: Request) -> Int? {
return requestsAndRetryCounts.index(where: { $0.0 === request })
}
func addRetryInfo(request: Request, retryCount: Int? = nil) {
lock.lock() ; defer { lock.unlock() }
guard index(request: request) == nil else { print("ERROR addRetryInfo called for already tracked request"); return }
requestsAndRetryCounts.append((request, retryCount ?? defaultRetryCount))
}
func deleteRetryInfo(request: Request) {
lock.lock() ; defer { lock.unlock() }
guard let index = index(request: request) else { print("ERROR deleteRetryInfo called for not tracked request"); return }
requestsAndRetryCounts.remove(at: index)
}
func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion){
lock.lock() ; defer { lock.unlock() }
guard let index = index(request: request) else { completion(false, 0); return }
let (request, retryCount) = requestsAndRetryCounts[index]
if retryCount == 0 {
completion(false, 0)
} else {
requestsAndRetryCounts[index] = (request, retryCount - 1)
completion(true, 0.5)
}
}
}
这是我尝试使用的类:
let sessionManager = SessionManager()
override init() {
sessionManager.adapter = RequestAdapter.self as? RequestAdapter
sessionManager.retrier = OAuth2Handler()
}
func sendRequest(url: String,meth: HTTPMethod,parameters: [String: AnyObject]?, success: @escaping (String, Data) -> Void, failure: @escaping (Error) -> Void) {
self.asyncSerialWorker.enqueueWork { (done) in
self.sessionManager.request(url, method:meth).responseJSON { (responseObject) -> Void in
if responseObject.result.isSuccess {
print("Generic succsess")
let value = responseObject.result.value
let json = JSON(value!)
guard let result = responseObject.data else {return}
success(self.parser.parseMaiden(json: json), result)
}
if responseObject.result.isFailure {
let error : Error = responseObject.result.error!
print("login failed")
failure(error)
}
done()
}
}
}
如果还有其他建议,我很想听听
谢谢
最佳答案
sessionManager.adapter = RequestAdapter.self 作为? RequestAdapter
似乎非常错误。您应该将其设置为 OAuth2Handler
的实例。
关于iOS - Alamofire RequestRetrier 未被激发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52316381/
我正在尝试像 Alamofire 页面中的示例一样重试请求,但出现此错误: 请求重试代码如下: public typealias RequestRetryCompletion = (_ shouldR
我一直在将我的项目迁移到 swift3,并且一直在努力让 Alamofire RequestRetrier 协议(protocol)发挥作用。我遵循了 Alamofire 4.0 迁移指南: http
我正在使用 RequestRetrier 自动续订 API 的 access_token。但在每个请求函数中,我想捕获超时错误,但是 .responseJSON 正文中的 .case(let erro
我正在尝试实现一种重试机制,我看到 alamofire 有一个。我正在尝试实现一个简单的重试机制,并指定请求的次数,但出现了问题。 class OAuth2Handler: RequestAdapte
我正在使用 Alamofire 实现 RequestRetrier 以刷新给定用户的 accessToken。 func should(_ manager: SessionManager, retry
我正在使用 Alamofire 4.0 的 RequestRetrier 来控制对过期访问 token 的请求的重试。我正在关注文档 here . 我有一个与文档 OAuth2Handler 中提供的
我是一名优秀的程序员,十分优秀!