是否可以为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{Error Domain=kCFErrorDomainCFNetwork Code=-1001“(null)”UserInfo={{kCFStreamErrorCodeKey=-2102,{kCFStreamErrorDomainKey=4}},NSErrorFailingURLStringKey=url,NSErrorFailingURLKey=url,{kCFStreamErrorDomainKey=4,{kCFStreamErrorCodeKey=-2102,NSLocalizedDescription=请求超时。}
我想为项目中的每个HTTP调用设置相同的超时。
关键思想是将Alamofire会话管理器声明为全局变量。然后,要创建URLSessionConfiguration变量,请以秒为单位设置其超时,并将其分配给管理器。
项目中的每个调用都可以使用此配置的会话管理器。
在我的例子中,全局Alamofire会话管理器变量是在AppDelegate文件(全局)中设置的,其配置是在其didFinishLaunchingWithOptions方法中管理的
AppDelegate。敏捷的
import UIKit
var AFManager = SessionManager()
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 4 // seconds
configuration.timeoutIntervalForResource = 4 //seconds
AFManager = Alamofire.SessionManager(configuration: configuration)
return true
}
...
}
从现在开始,可以使用afManager从应用程序的任何部分调用Alamofire请求函数。
例如:
AFManager.request("yourURL", method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON { response in
...
}
斯威夫特3
被接受的答案对我不起作用。
经过大量研究,我是这样做的:
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120
manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])
您可以比较错误_code
如果它等于-1001
,即nsurerrortimedout
,则您知道这是一个超时。
let manager = Alamofire.SessionManager.default
manager.session.configuration.timeoutIntervalForRequest = 120
manager.request("yourUrl", method: .post, parameters: ["parameterKey": "value"])
.responseJSON {
response in
switch (response.result) {
case .success: // succes path
case .failure(let error):
if error._code == NSURLErrorTimedOut {
print("Request timeout!")
}
}
}
是否可以为Alamofire请求添加超时处理程序? 在我的项目中,我使用Alamofire的方式如下: 编辑: 请求失败消息 Error Domain=NSURLErrorDomain Code=-1001“请求超时。”UserInfo={NSUnderlyingError=0x7fc10b937320{Error Domain=kCFErrorDomainCFNetwork Code=-1001
问题内容: 免责声明:这是我第一次尝试该模块。 我使用以下方式尝试支持超时功能,以等待一组异步任务的所有结果。这是更大的库的一部分,因此我省略了一些不相关的代码。 请注意,该库已经支持通过ThreadPoolExecutors和ProcessPoolExecutors提交任务和使用超时,因此,我对使用这些代替建议或关于为什么要使用的问题并不真正感兴趣。转到代码… 起初,我不必担心在超时时取消待处理
问题内容: 对不起,我的英语不好 :) 我在iOS应用程序的Swift中通过Alamofire解析JSON响应时遇到问题。我编写了一个函数来返回JSON响应字符串。请求和响应处理我做Alamofire和JSON处理我做SwiftyJSON。首先,我声明一个名为 jsonString的变量 ,其值为 test 。然后,我向REST服务发出请求,并通过单击按钮获得JSON响应。我想使用函数 ping(
问题内容: 在第一种情况下 ,它会抛出 NSURLErrorDomain (正确设置了超时): 在第二种情况下 ,超时不会被替换,而是仍设置为60秒。 我在ios 10.1中运行 我的代码:( 不起作用) 解决了Alamofire github线程: Alamofire 4.3.0设置超时引发NSURLErrorDomain错误#1931 问题答案: 基于@ kamal-thakur响应。 迅捷3
问题内容: 我试图用一个批量一些 KTable 值,并送他们。似乎30秒钟超出了使用者超时间隔,在此间隔之后,Kafka认为该使用者已失效并释放了分区。 我尝试提高 轮询 和 提交间隔 的频率来避免这种情况: 不幸的是,这些错误仍在发生: (很多) 其次是: 显然,我需要更频繁地将心跳发送回服务器。怎么样? 我的拓扑是: 该 KTable 是关键,每30秒分组值。在 Processor.init(
前言 sender的run 调用done方法,并传入TimeoutException