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

Posted

技术标签:

【中文标题】等待函数完成处理程序完成失败【英文标题】:waiting for a function to finish with completion handler fails 【发布时间】:2016-12-08 15:42:06 【问题描述】:

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

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

    从 Facebook makeRequest() 加载数据 将数据保存到我的数据库saveAndProceed()

我需要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()。 有谁现在如何使这个语法正确?

【问题讨论】:

【参考方案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
        
    

【讨论】:

感谢您的帮助。我试图实现这一点,但我的 makeRequest 仍然在 saveAndProceed 之后执行【参考方案2】:
 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
)

【讨论】:

以上是关于等待函数完成处理程序完成失败的主要内容,如果未能解决你的问题,请参考以下文章

DispatchQueue 不等待异步函数完成

等待两个异步完成函数完成,然后再执行下一行代码

您如何等待主队列完成处理程序?

如何快速使用异步函数?完成处理程序[重复]

AlamoFire downloadProgress 完成处理程序到异步/等待

等待网络接口配置完成超时