如何在另一个Alamofire请求中运行Alamofire请求?

时间:2016-11-09 20:13:08

标签: ios queue alamofire

我想首先发布到网站,然后获取另一个网站获取数据。

并更改POST中的密钥,并在for循环中继续执行此操作5次以获取不同的数据。

然而,程序总是首先运行POST 5次,然后再运行GET 5次,这使我得到相同的数据。

以下是代码:

for i in 1...5{

    let postData: Parameters = ["key": "\(i)"]

    Alamofire.request(" POST Website", method: HTTPMethod.post, parameters: postData, encoding: URLEncoding.default, headers: self.headers).response(completionHandler: { (ressponse) in

        Alamofire.request(" GET Website ", method: HTTPMethod.get, headers: self.headers).response(completionHandler: { (response) in

            // Get Data
        })
    })
}

我该如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:2)

如果你想在开始下一个请求之前等到第一个请求完成,你需要从完成处理程序中启动你的下一个请求:

    func getData (count: Int) {
        let postData: Parameters = ["key": "\(count)"]

        Alamofire.request(" POST Website", method: HTTPMethod.post, parameters: postData, encoding: URLEncoding.default, headers: self.headers).response(completionHandler: { (ressponse) in

            Alamofire.request(" GET Website ", method: HTTPMethod.get, headers: self.headers).response(completionHandler: { (response) in
                if count > 0 {
                    self.getData(count - 1)
                }
                })
            })
        }
    }

答案 1 :(得分:1)

您应该了解同步和异步操作之间的区别。这里有关于SO或其他任何地方的主题有很多答案。 Example

基本上你的for循环几乎立即执行,它不会等待来自POST或GET请求的任何响应。每次在循环内部安排POST请求,每次完成后,都会发送另一个GET请求。所以你得到了这种行为:

POST, POST, POST, POST, POST .......... GET, GET, GET, GET, GET

如果你想这样:

POST .... GET ..... POST ...... GET ...... and so on ....

收到GET请求的响应后,您应该调用POST请求,如下所示:

func postRequest(index: Int, count: Int) {
    if count > 0 {
        let postData: Parameters = ["key": "\(index)"]
        Alamofire.request(" POST Website", method: HTTPMethod.post, parameters: postData, encoding: URLEncoding.default, headers: self.headers).response(completionHandler: { (response) in
            Alamofire.request(" GET Website ", method: HTTPMethod.get, headers: self.headers).response(completionHandler: { (response) in
                // Get Data
                postRequest(index+1, count-1)
            })
        })
    }
}
相关问题