我需要检查循环中的处理状态。需要得到请求
func check( completion: @escaping (Bool)->()){
let url = URL(string: "url")!
var curStatus = "processing"
let serialQueue = DispatchQueue(label: "serialQueue")
while curStatus == "processing" {
serialQueue.async{
let runLoop = CFRunLoopGetCurrent()
Alamofire.request(url, method: .get, parameters: nil)
.responseJSON { response in
guard response.result.isSuccess else {
completion(false)
return
}
guard let value = response.result.value as? [String: Any] else {
completion(false)
return
}
curStatus = value["status"] as? String ?? "error"
if curStatus == "ok" {
// do something
completion(true)
return
}
if curStatus == "error"{
completion(false)
return
}
CFRunLoopStop(runLoop)
}
sleep(2)
CFRunLoopRun()
}
}
}
问题:不响应responseJSON。我把断点放在
guard response.result.isSuccess else ...
它没有调用它,但是断点在行中
Alamofire.request(url, ...
工作正常。
我该如何解决?
对不起,我的英语。我只是在学习。
答案 0 :(得分:1)
我真的不认为您应该不断地发出网络请求,只是为了检查服务器端是否成功。我认为您需要重新设计UX。
但是,..为了解决您要解决的问题,我建议您使用计时器。
PsuedoCode:
let minuteInterval = TimeInterval.minute() * 5
var isMakingRequest = false
let timer = NSTimer.scheduledTimerWithTimeInterval(minuteInterval, target: self, selector: #selector(checkServer), userInfo: nil, repeats: true)
@objc func checkServer() {
guard !isMakingRequest else { return }
isMakingRequest = true
Do network request {
self.isMakingRequest = false
}
}