【发布时间】:2018-10-12 13:02:54
【问题描述】:
我一直在尝试使用实时数据库从 Firebase 获取数据。我想检查 iPhone 中的联系人,然后如果任何联系人号码与 db 中“数字”表中的任何号码匹配,那么我必须从中获取 user_key,然后使用该密钥,我必须获取相应的详细信息来自用户表。
for number in numbers {
Database.database().reference().child("numbers/\(number)").observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
let userKey = snapshot.value as! String
// We found this user, no determine there name, (TODO has_image?)
Database.database().reference().child("users/\(userKey)/public/name").observeSingleEvent(of: .value, with: { (namesnapshot) in
if namesnapshot.exists() {
let name = namesnapshot.value as! String
print("FOUND \(name)")
complete(.success((userID: userKey, name: name)))
}
})
} else {
if numbers.index(of: number) == numbers.count - 1 { // Last Number checked and not found yet, so fail
complete(.failure(UserApiError.UserNotFound))
}
}
})
}
numbers 是特定联系人的联系人号码数组。对于具有单个号码的联系人,这可以正常工作。但是对于有多个号码的联系人,
Database.database().reference().child("users/\(userKey)/public/name").observeSingleEvent(of: .value, with: { (namesnapshot) in
将在一段时间后调用,因为 for 循环中的下一个索引被调用。所以即使我在一个联系人的第一个号码中有数据,它也会返回失败,因为下一个号码将在observeSingleEvent成功之前迭代。
我已经坐了几个小时了,没有留下任何想法。请帮忙!
【问题讨论】:
-
你找到解决这个问题的方法了吗?我也面临同样的问题。
标签: ios swift firebase firebase-realtime-database