Alamofire запрос с циклом - PullRequest
       16

Alamofire запрос с циклом

1 голос
/ 27 марта 2019

Мне нужно проверить статус обработки в цикле. нужно получить запрос

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()
        }

    }
}

Проблема: не идет в ответ JSON. Я поставил точку останова в

guard response.result.isSuccess else ...

и это не вызывало его, но точка останова в строке

Alamofire.request(url, ... отлично работает.

Как мне это исправить?

Извините за мой английский. Я только учусь этому.

1 Ответ

1 голос
/ 27 марта 2019

Я действительно не думаю, что вы должны постоянно делать сетевые запросы, чтобы проверить успешность на стороне сервера. Я думаю, вам нужно изменить дизайн вашего 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...