【发布时间】:2016-08-06 04:23:10
【问题描述】:
是否可以为 Alamofire 请求添加超时处理程序?
在我的项目中,我以这种方式使用 Alamofire:
init() {
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.timeoutIntervalForRequest = 30
self.alamofireManager = Alamofire.Manager(configuration: configuration)
}
func requestAuthorizationWithEmail(email:NSString, password:NSString, completion: (result: RequestResult) -> Void) {
self.alamofireManager!.request(.POST, "myURL", parameters:["email": email, "password":password])
.responseJSON { response in
switch response.result {
case .Success(let JSON):
//do json stuff
case .Failure(let error):
print("\n\nAuth request failed with error:\n \(error)")
completion(result: .ConnectionFailed)
}
}
}
编辑:
请求失败消息
Error Domain=NSURLErrorDomain Code=-1001 "请求超时。" UserInfo={NSUnderlyingError=0x7fc10b937320 {错误域=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=url, NSErrorFailingURLKey=url, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102 , NSLocalizedDescription=请求超时。}
【问题讨论】:
-
超时不也触发
.Failure吗?从未使用 Alamofire 对其进行过测试,但我使用的大多数其他系统都会回退到类似的错误/故障。你测试了什么? -
@Allendar 你是对的,我的错,我没有提到这一点。我已经编辑了我的问题。
-
响应对象将包含 HTTP 状态。如果是 408(408 请求超时),那么您可以在
.Failure调用中检查它并适当地处理它。甚至可能还有用于 http 状态的宏,因此您可以简单地将HTTP_STATUS_408之类的内容作为整数占位符进行检查。