带while循环的Alamofire请求

时间:2019-03-27 15:46:03

标签: swift

我需要检查循环中的处理状态。需要得到请求

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, ...工作正常。

我该如何解决?

对不起,我的英语。我只是在学习。

1 个答案:

答案 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
    }
}