异步任务

时间:2017-06-21 17:39:26

标签: swift firebase asynchronous swift3 firebase-realtime-database

我正在开发一个使用firebase数据库的项目,此时我正在尝试使用这段代码从我的基础读取异步数据:

let myGroup = DispatchGroup()
        let ref1 = FIRDatabase.database().reference().child("chats")
        let curUserUid = (FIRAuth.auth()?.currentUser?.uid)!
        myGroup.enter()
        ref1.observe(FIRDataEventType.value, with: { (snapshot) in
            if snapshot.hasChildren() {
                let postDict = snapshot.value as? [String : AnyObject] ?? [:]
                for elem in postDict {
                    let valuesDict = elem.value as? [String : AnyObject] ?? [:]
                    for kv in valuesDict {

                        if kv.key == "name" && kv.value.contains(curUserUid) {
                            MainUsersList.currentChats.append(elem.key)
                            print(elem.key)
                        }

                    }

                }
            }
           myGroup.leave()
        })
        myGroup.notify(queue: .main, execute: {
            //self.loadLastMsgs()
            self.ShowVC()
        })

和ShowVC方法:

let st = UIStoryboard(name:"Main", bundle: nil)
let anotherVC = st.instantiateViewController(withIdentifier: "messagesVC")
self.present(anotherVC, animated: true, completion: nil)
print("showVC")

在另一个VC中,我在viewDidLoad中有这个代码:

print("!!!!!!!")
print(MainUsersList.currentChats.count)

当我执行按钮单击时,在第一段代码写入的地方,我在控制台中得到它:

  

!!!!!!!

     

0

     

y2MTmBq8o0QF9yxcSBCOpI1DZku2-DnYqmHW2umWaWN54buhtGrXEToW2 //elem.key

     

showVC

     

!!!!!!!

     

1

所以,我的问题是为什么ShowVC在异步任务结束之前执行,为什么它执行两次(我没有另外的代码用print(!!!!!!!))?提前致谢! 附:我没有self.ShowVC()代码写在其他地方肯定

1 个答案:

答案 0 :(得分:0)

我弄清楚出了什么问题。我刚刚触发了segue到我的第二个VC,所以我的代码执行了两次。所有其他代码都是正确的)