【发布时间】:2017-02-16 14:34:13
【问题描述】:
我想执行多个 Alamofire 请求。但是,由于数据依赖性,新请求仅应在前一个请求完成时开始。
我已经向question 询问了一个更一般的异步请求示例,该示例已通过OperationQueue 解决。但是,我没有成功使用 Alamofire 实现相同的目标。
public func performAlamofireRequest(_ number: Int, success: @escaping (Int) -> Void)->Void {
Alamofire.request(String(format: "http://jsonplaceholder.typicode.com/posts/%i", number+1)) // NSURLSession dispatch queue
.responseString { response in // Completion handler at main dispatch queue?
if response.result.isSuccess {
// print("data")
} else if response.result.isFailure {
// print("error")
}
success(number) // Always leave closure in this example
}
}
为了确保在下一个请求开始之前完成请求,我使用OperationQueue,如下所示:
let operationQueue = OperationQueue.main
for operationNumber in 0..<4 { // Create some operations
let operation = BlockOperation(block: {
performAlamofireRequest(operationNumber) { number in
print("Operation #\(number) finished")
}
})
operation.name = "Operation #\(operationNumber)"
if operationNumber > 0 {
operation.addDependency(operationQueue.operations.last!)
}
operationQueue.addOperation(operation)
}
但是,输出是:
Operation #0 finished
Operation #3 finished
Operation #2 finished
Operation #1 finished
这显然是不正确的。
如何使用 Alamofire 实现这一目标?
【问题讨论】:
标签: swift alamofire nsoperationqueue