在我的iOS应用中,我想在用户注销之前尝试保存一段用户数据。
- 更新了相同问题的代码。 “用户已经退出”在“完成进入完成块”之前打印。
let tryToLogout = {
try! FIRAuth.auth()!.signOut()
print("USER HAS BEEN LOGGED OUT")
}
rootRef.child(path).setValue(value, withCompletionBlock: { (_,_) in
print("FELL INTO COMPLETION BLOCK")
tryToLogout()
})
不幸的是,我有时会在setValue尝试中获得权限。我认为这里发生的事情是用户通过在setValue可以保持之前退出来进行解除。如果不是因为signOut()调用明显位于setValue的完成块内,那对我来说就完全没有意义。
有任何解释吗?
更新---------------------------------------------- -------------------------- 我有点想出这个问题。 rootRef.child.setValue内容是我在整个项目中易于使用的一般设定值函数。当我获取该函数的内容(您在上面看到的setValue代码)并自行运行它(不在单独的函数调用内)时,问题就会消失,并且print语句的顺序正确。我相信这意味着我的问题是由调用堆栈引起的。注销用户是调用堆栈中的最后一件事,因此它是调用堆栈的第一件事 - 第一件事就是执行。
以下代码应证明此问题
func setFireBaseValue(path: String, value: NSObject, completionCode: () ) {
getRootRef().child(path).setValue(value, withCompletionBlock: { (_,_) in
print("FELL INTO A COMPLETION BLOCK")
completionCode
})
}
let tryToLogout = {
try! FIRAuth.auth()!.signOut()
print("USER HAS BEEN LOGGED OUT")
}
setFireBaseValue(path: "test", value: "hi" as NSString, completionCode: tryToLogout())
答案 0 :(得分:0)
您可以使用OnCompleteListener侦听向firebase数据库成功添加数据,并在成功更新数据后注销。如果在保存数据时出现任何错误,请通知用户并进行相应操作。
答案 1 :(得分:0)
尝试使用: -
node server