我正在使用Alamofire,我想发送获取请求。如果失败,我想在执行一些其他操作后重试。
我将请求保存在变量中:
let myRequest = Alamofire.request("myurl", method: .get)
和另一个功能:
func retry(request:DataRequest) {
request.responseSwiftyJSON { response in
// ... code to handle the response ...
}
}
这样,我可以多次调用retry函数,并传递相同的对象myRequest。
但是,只有第一次才正确发送了请求,然后我认为它已被缓存(或以某种方式,Alamofire对象意识到请求对象的响应字段已经有效),并且该请求不再发送给服务器。
为解决此问题,我尝试以这种方式更改重试功能:
func retry2(request:DataRequest) {
Alamofire.request(request.request!).responseSwiftyJSON { response in
// ... code to handle the response ...
}
}
这应该仅使用已保存请求的URLRequest字段初始化一个新的Alamofire请求,但是现在该请求每次被调用两次! (我在后端检查它,并且确定这是使用此方法引起的。)
是否可以重新发送原始保存的请求? Alamofire是否可以通过某种方式从已保存的请求中初始化新请求?
解决方案
最后我做了类似@JonShier和@DuncanC的建议:
struct APIRequest {
let url: URLConvertible
let method: HTTPMethod
let parameters: Parameters?
let encoding: ParameterEncoding
let headers: HTTPHeaders?
init(_ url:URLConvertible, method:HTTPMethod = .get, parameters:Parameters? = nil, encoding:ParameterEncoding = URLEncoding.default, headers:HTTPHeaders? = nil) {
self.url = url
self.method = method
self.parameters = parameters
self.encoding = encoding
self.headers = headers
}
func make() -> DataRequest {
return Alamofire.request(url, method: method, parameters: parameters, encoding: encoding, headers: headers)
}
}
答案 0 :(得分:2)
我还没用过AlamoFire,而最少的使用是在几年前。
环顾AlamoFire代码,似乎request()
函数返回一个DataRequest
对象。此外,看起来DataRequest
是一种引用类型,旨在跟踪对服务器的特定请求及其响应。
看起来就像创建了一个之后,就使用它直到它完成或失败,然后将其丢弃。似乎不打算将它们重用于相同类型的后续请求。
总结:
问题:“如何重用AlamoFire DataRequest对象。”
答案:“不要那样做。”