我的代码给了我一个他永远不会进入的无限循环,如果不是,我很确定因为firebase只获得异步函数。
我想检查一下" random_hexa"存在,并得到新的随机,直到我得到一个不存在于我的数据库
while (bool_check_while_exist == false)
{
ref.child("Salons").child(random_hexa).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if (snapshot.exists())
{
random_hexa = self.randomAlphaNumericString(5)
}
else
{
bool_check_while_exist = true
}
})
答案 0 :(得分:1)
您正在运行本地while循环,该循环不会处理Firebase数据库(以及大多数现代互联网)的异步性质。正确的流程是:
这可以通过递归函数轻松完成:
func findUniqueNumber(ref: FIRDatabaseReference, withBlock: (value: Int) -> ()) {
let random_number = Int(arc4random_uniform(6) + 1)
ref.child(String(random_number)).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
if (snapshot.exists())
{
print("Rejected \(random_number)")
self.findUniqueNumber(ref, withBlock: withBlock)
}
else
{
withBlock(value: random_number)
}
})
}
然后你称之为:
findUniqueNumber(ref, withBlock: { value in
print(value)
})