Firebase:在注销之前保存数据

时间:2016-10-01 13:51:48

标签: ios swift firebase firebase-realtime-database firebase-authentication

在我的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())

2 个答案:

答案 0 :(得分:0)

您可以使用OnCompleteListener侦听向firebase数据库成功添加数据,并在成功更新数据后注销。如果在保存数据时出现任何错误,请通知用户并进行相应操作。

答案 1 :(得分:0)

尝试使用: -

node server