首页 > 解决方案 > 返回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
                            }
                            
                        }
                    }

标签: swifttimeralamofire

解决方案


在计时器上进行网络请求是一个坏主意。改用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虽然不建议运行它。


推荐阅读