从 2 天开始,我感觉我正在搜索整个网络来解决我的多个 http 请求问题。所以我的工作流程是这样的:
将图像上传到服务器
- 响应 = 带有任务 ID 的 XML 格式
使用任务 ID 向服务器发出 GET 请求以检查此任务的状态。
- 响应 = XML 格式,其中状态可能是“已完成”、“进行中”、“已排队”
- 如果 Status != "Completed" - 重试第 2 步
- 如果状态 == “已完成” - 转到第 3 步
从 resultUrl 下载结果
我最后一次尝试是用PromiseKit
一种干净的方式来链接请求,就像这篇文章中描述的那样:链接多个 Alamofire 请求。但如果状态尚未完成,我不知道如何每 2-5 秒循环第二步。
此工作流程是否有推荐的解决方案?这是我的测试PromiseKit
,我成功地链接了没有循环的请求:
let request = Client.imageUploadRequest(image: imageView.image!)
let httpOperation = HTTPOperation(withRequest: request)
httpOperation.sendRequest().then() { result -> Promise<String> in
let xml = SWXMLHash.parse(result)
let id = self.getXMLAttribute(from: xml, with: "id")!
let taskStatusrequest = Client.getTaskStatusRequest(withTaskID: id)
let httpOperation = HTTPOperation(withRequest: taskStatusrequest)
return httpOperation.sendRequest()
}
// Loop this result if status != "Completed"
.then { result -> Promise<Data> in
let xml = SWXMLHash.parse(result)
let downloadUrl = self.getXMLAttribute(from: xml, with: "resultUrl")!
let downloadRequest = Client.getDownloadRequest(withUrl: downloadUrl)
let httpOperation = HTTPOperation(withRequest: downloadRequest)
// if status != "Completed" don't return, retry this step
return httpOperation.downloadData()
}
.then { _ -> Void in
// Refresh View with data
}