运行 两个 Alamofire 请求顺序 Swift

Running Two Alamofire Requests in Sequence Swift

我正在使用 here 找到的异步库,以便在 运行 我来自 ViewDidLoad 的第二个请求之前等待第一个 alamofire 请求完成。该库似乎易于使用,但我永远无法等待第一个请求。我的代码如下:

let group = AsyncGroup()

         group.utility
        {
            self.getToken()
        }

        group.wait()

        self.getDevices()

我希望 getToken 函数在继续 getDevices 请求之前完成 Alamofire 请求及其完成处理程序。两者都是非常简单的 Alamofire 请求。

编辑:

这是 getToken 请求。在调用第二个 alamofire 请求之前,token 变量未使用 alamofire 响应进行更新。

func getToken()

    {
        let httpheader: HTTPHeaders =

            [
                "Content-Type": "application/json"
        ]



        // Dev

        let param = [params here]


        Alamofire.request("url", method: .post, parameters: param, encoding: JSONEncoding.default, headers:httpheader).validate()
            .responseData { response in
                switch response.result {

                case .success:
                    if let data = response.data {

                        let xml = SWXMLHash.parse(data)

                        token = (xml["authResponse"] ["authToken"].element?.text)!

                    }

                case .failure:

                  print ("error")


                }


        }


    }

你的 getToken 看起来更像是:

func getToken(whenDone:(String?)->()) {
    let httpheader: HTTPHeaders = [
            "Content-Type": "application/json"
    ]

    // Dev
    let param = [params here]

    Alamofire.request("url", method: .post, parameters: param, encoding: JSONEncoding.default, headers:httpheader).validate()
        .responseData { response in
            switch response.result {

            case .success:
                if let data = response.data {
                    let xml = SWXMLHash.parse(data)
                    token = (xml["authResponse"] ["authToken"].element?.text)!
                    whenDone(token)
                }

            case .failure:
                print ("error")
                whenDone(nil)
            }
    }
}

并且调用序列变为:

getToken() { token ->
    guard let token = token else {
        return
    }

    getDevices()
}