如何在执行下一个操作之前等待请求完成(Xcode 11)

Posted

技术标签:

【中文标题】如何在执行下一个操作之前等待请求完成(Xcode 11)【英文标题】:How to wait for request to finish before execute the next operation (Xcode 11) 【发布时间】:2019-12-31 14:12:14 【问题描述】:

我有一个允许在 firebase 上获取数据的代码。我需要等到请求得到满足才能执行下一个操作。

我尝试过这样的事情:

var a = [String : Any]()
let group = DispatchGroup()
group.enter()

DispatchQueue.main.async 
    dbRef.child("results/users").observeSingleEvent(of: .value)  (snapshot) in
        if let res = snapshot.value as? [String:Any] 
            a = res
        
    


group.notify(queue: .main) 
    print(a)

但它不起作用:我希望这会显示 a 的值。 (用于从 firebase 检索数据的代码有效。)相反,没有显示任何内容。

有人有想法吗? 谢谢

【问题讨论】:

【参考方案1】:

你可以这样解决:

var a: [String:Any]

func myFunction(completion:@escaping (Bool) -> () ) 

    DispatchQueue.main.async 
        dbRef.child("results/users").observeSingleEvent(of: .value)  (snapshot) in
        if let res = snapshot.value as? [String:Any] 
            a = res
        
    



myFunction  (status) in
    if status 
        print(a!)
    

【讨论】:

以上是关于如何在执行下一个操作之前等待请求完成(Xcode 11)的主要内容,如果未能解决你的问题,请参考以下文章

在映射下一项之前,异步等待映射不等待异步函数在映射函数内部完成

在执行下一个代码块之前等待多个 RxJS 调用

如何等待ajax完成再执行相应操作

等待多个 Alamofire 请求完成

在执行下一行代码之前等待超时完成

如何等待http请求在处理到angular 7中的下一步之前获得响应[重复]