观察观察者单个事件中的单个事件

时间:2018-01-17 22:48:10

标签: ios swift function firebase

基本上,我有两个observeSingleEvents,一个在另一个内,问题是在第一个终止之后第二个终止有时间完成。这里的代码如下所示:

static func functionName(completionHandler: @escaping (_pulled: [Restaurant]?) -> Void) {
    reference.observerSinglEvent(of: .value, with: { (snapshot) in
        //interior code
        secondReference.observeSingleEvent(of: .value, with: { (snapshot) in
            //interior code
            print("FIRST ALERT MESSAGE")
        })
        print("SECOND ALERT MESSAGE")
    })
 }

这里的问题是FIRST ALERT MESSAGE正在SECOND ALERT MESSAGE之后打印,当我需要先打印它时。

注意:我知道这里发布的代码没有使用completionHandler,我只是觉得函数的一部分对于问题是不必要的,所以我把它留了出来。

非常感谢任何和所有帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

通常情况下,外部单个观察者首先执行,然后块内的所有代码都会触发,所以第二次打印,同时等待从firebase开始,如果你想要反向引用则反向引用

解决方案1 ​​

  static func functionName(completionHandler: @escaping (_pulled: [Restaurant]?) -> Void) {
reference.observerSinglEvent(of: .value, with: { (snapshot) in
    //interior code
    secondReference.observeSingleEvent(of: .value, with: { (snapshot) in
        //interior code
        print("FIRST ALERT MESSAGE")

         /// here wait by dispatch after then show second alert

          print("SECOND ALERT MESSAGE")
    })

})

}

解决方案2

static func functionName(completionHandler: @escaping (_pulled: [Restaurant]?) -> Void) {
reference.observerSinglEvent(of: .value, with: { (snapshot) in
    //interior code
     getFirst
     {
       print("SECOND ALERT MESSAGE -------was first")
     }
})
}

///

 func getFirst(completionHandler: @escaping (_pulled:true) -> Void) {

    secondReference.observeSingleEvent(of: .value, with: { (snapshot) in
        //interior code
        print("FIRST ALERT MESSAGE ----- was second")
        completionHandler(true)
    })

   }