第二次调用函数时不调用Swift完成处理程序

时间:2017-11-28 03:39:34

标签: swift alamofire completionhandler

我有一个带有完成处理程序的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()

有什么想法吗?

0 个答案:

没有答案