基本上,我有两个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,我只是觉得函数的一部分对于问题是不必要的,所以我把它留了出来。
非常感谢任何和所有帮助。谢谢!
答案 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)
})
}