我正在尝试为我的应用设置一个viewCount,当我设置断点并通过代码时,它总是跳过queryOrdered并且我不确定为什么
func increaseViewCount(username: String, time: NSNumber){
guard let uid = Auth.auth().currentUser?.uid else{
return
}
let refOfUserName = Database.database().reference().child("Users").child(uid)
refOfUserName.observeSingleEvent(of: .value, with: {(snapshot) in
let dictionaryOfUser = snapshot.value as? [String: AnyObject]
// let currentUsersName = dictionaryOfUser?["username"] as? String
let currentUsersName = "hello"
if username == currentUsersName {
print("this is the same user")
}else{
let postRef = Database.database().reference().child("HistoryOfPosts").child("post")
postRef.queryOrdered(byChild: "post").queryEqual(toValue: time).observeSingleEvent(of: .childAdded, with: {(snapshotPost) in
print(snapshotPost.exists())
print(snapshotPost)
let valString = snapshotPost.value
let number = valString as! NSNumber
var value = number.intValue
value = value + 1
let values = ["viewCount": value] as [String:Any]
postRef.updateChildValues(values)
})
}
})
}
答案 0 :(得分:1)
数据是从Firebase数据库异步加载的。在附加观察者之后,程序继续使用语句,而不是等待该加载完成。
在这种情况下,这意味着代码在附加观察者之后几乎完全退出increaseViewCount()
。然后,一旦从Firebase服务器返回数据,就会执行回调块中的代码。
要将转换为回调块,请在该块中的第一个语句上放置一个断点。