我在完成某个网络请求时,我想调用一个快速函数,该函数要被调用。如果服务器响应显示更多数据(提供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()
。
有什么想法?
如果偏移不为空,则您将通过空闭合。您需要将完成参数转发到getTasks。尝试一下。
//...
if !offset.isEmpty {
getTasks(project: project, paginationToken: offset, completion: completion)
}
//...