等待函数完成处理程序失败

时间:2016-12-08 15:42:07

标签: swift asynchronous completionhandler

我正在尝试在处理数据之前等待异步函数完成(例如将其保存到我的数据库中)。

我有一个包含两个任务的函数loadFacebookDetails()

  1. 从Facebook makeRequest()
  2. 加载数据
  3. 将数据保存到我的数据库saveAndProceed()
  4. 我需要makeRequest() - > (异步)在处理保存之前完成。

    这是我到目前为止所得到的: 我宣布了typealias FinishedDownload = () -> () 我创建了:

    func makeRequest(completed: FinishedDownload){
    .... // bunch of code
    completed() // call that I completed my task at end of function
    
    
    }
    

    现在我现在不知道如何在loadFacebookDetails中调用makeRequest。

    我也创造了这个:

    makeRequest { () -> () in
    saveAndProceed()
    }
    

    和我的saveAndProceed()。 现在有人如何使这种语法正确吗?

2 个答案:

答案 0 :(得分:1)

你应该有类似的东西:

func makeRequest(completion : ( ( Bool ) -> Void)){
    //your stuff goes hre
    completion(true)
    //or
    completion(false)
}

func saveAndProceed() {
    //your stuff
}

func loadFacebookDetails() {
    makeRequest { (hasSucceed) in

        if hasSucceed {
            saveAndProceed()
        }else{
            //handle Error
        }
    }
}

答案 1 :(得分:0)

 func makeRequest(url: String ,callback :@escaping (YourObject) -> Void , errorCallBack : @escaping (String) -> Void ){
            // if finish or success
           callback(objecttoSend);

           // or if failed
           errorCallBack(message)
    }

并像这样称呼它

makeRequest(url: "http://", callback: {(Object)in
   // on ur first action
  }, errorCallBack: {(error)in
   // on ur second action
})