swift - 返回false后再次自动请求
问题描述
如果返回的数据状态为 201,我对 2 秒后再次自动请求有一些想法。从一开始,我就使用 Timer 来延迟它并发出一次请求。但我的请求没有再次运行。有什么解决办法吗?谢谢。这是我的代码:
Timer.scheduledTimer(withTimeInterval:2, repeats: true) { timer in
let url = "exampleweb.com" // This will be your link
let parameters: Parameters = ["User_type": type, "User_name": name, "User_email": email, "User_contact": contact, "User_password": password, "from_referral": referral] //This will be your parameter
Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in
print(response)
if response.status = 200 {
//Do something when success
}else
if response.status = 201 {
//Do something when failed
}
}
}
解决方案
在计时器上进行网络请求是一个坏主意。改用DispatchQueue.asyncAfter
:
func runRequest() {
Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in
print(response)
if response.status = 200 {
//Do something when success
}else
if response.status = 201 {
// Repeat request after 2 sec:
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) {
self.runRequest()
}
}
}
}
我使用global
队列,您可能希望将其微调到某个qos
级别。例如userInitiated
,请求很重要,background
如果它具有中/低优先级。DispatchQueue.main
虽然不建议运行它。
推荐阅读
- flutter - 颤动的TextField没有被更新
- javascript - PHP 或 Javascript 中的 VCL Varnish randomint_seed 和 std.strtol
- python - 初学者Q:如何使用if/else缩进声明的变量
- mongodb - MongoDB中未捕获的异常
- c - 错误:此处未声明“k”(不在函数中)[solution.c] int data[k], front,rear;
- php - 如何将序列化产品数据发送到 WooCommerce API 上的新产品创建?
- node.js - node.js 中的“无法获取 /messages/”
- sql - 如何在 oracle sql developer 中创建多个模式
- jquery - 脚本标签被 jquery 删除
- c - 从 C 中的函数访问二维字符数组时出错