2日以来、私は複数のHTTPリクエストで自分の問題を解決するためにウェブ全体を探しているように感じています。だから私のワークフローは次のようになります。Swift - ループで複数のチェーンのHTTPリクエスト
がサーバー
- レスポンス=タスクIDを持つサーバへのタスクID
GETリクエストを使用してXMLフォーマットに画像をアップロードこのタスクのステータスを確認します。 != "完了"
- レスポンス=ステータスが "進行中"、 "完了" することができ、XMLフォーマット、 "キュー"
- は、ステータスの場合 - ステータス場合には、ステップ2
- を再試行してください==「完了「 - 3
resultUrl
から結果をダウンロード
私の最後の試みはを使用していたに進みますを使用して、この投稿に記載されているようなクリーンな方法でリクエストを連鎖させてください:Chain multiple Alamofire requestsしかし、ステータスがまだ完了していない場合は、2〜5秒ごとに2番目の手順をループする方法がわかりません。
このワークフローの推奨ソリューションはありますか?これは私が成功したループせずに要求をチェーン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
}
ありがとうございます。これは私の場合の完璧な例です。今私はクリーンなコードを取得するために私の回避策をクリーンアップすることができます! – kaaPe