我有一个带有完成处理程序的Swift函数,我想在完成某个网络请求时调用它。可以根据服务器响应是否表示有更多数据(offset
已提供)来重复网络请求。
我最初称之为:
func myMainFunction(){
getTasks(project: project, paginationToken: nil) {
print("This never fires...")
}
}
我的getTasks()
功能是这样的:
func getTasks(project: Project, paginationToken: String?, completion: @escaping () -> Void){
var url = "..."
if let token = paginationToken{
url += "&offset=\(token)"
}
Alamofire.request(url).responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
//...
//Check for pagination
let offset = json["next_page"]["offset"].stringValue
if !offset.isEmpty{
//Theres a pagination token available, go again!
getTasks(project: project, paginationToken: offset){}
}else{
print("This prints to the log on the last run through")
completion()
}
case .failure(let error):
print("Task error: \(error)")
}
}
}
如果永远不会有offset
,则completion()
处理程序正常工作。但是如果必须再次调用getTasks()
,则完成处理程序会以某种方式失效,并且永远不会返回到我原来的myMainFunction()
。
有什么想法吗?