Firebase的SET方法不起作用

时间:2017-05-29 00:30:15

标签: javascript firebase firebase-realtime-database

我正在使用 firebase ,我在Javascript中编写了一个简单的函数来设置和更新数据。

function setLastOnline(userID, InOut){
    var dbLastonline = firebase.database().ref().child("lastonline");
    if (InOut) {
        dbLastonline.child(userID).set({
            "isConnected":true,
            "connectedby":"web",
            "lastIn":firebase.database.ServerValue.TIMESTAMP,
            "lastOut":0
        });
    } else {
        dbLastonline.child(userID).update({
            "isConnected":false,
            "connectedby":"web",
            "lastOut":firebase.database.ServerValue.TIMESTAMP
        });
    }
}

当我调用函数执行SET方法时,没有任何反应......数据库中没有数据,也没有错误代码......

    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            setLastOnline(user.uid, true);
        }
      }

但是当我调用相同的函数来执行UPDATE时,一切正常。

    firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            setLastOnline(user.uid, false);
            firebase.auth().signOut();
        }`
     }`

我做错了什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我发现了错误。以上功能正确,效果很好。问题是我在调用setLastOnline()后不久调用了window.open()。像这样:

firebase.auth().onAuthStateChanged(function(user) {
        if (user) {
            setLastOnline(user.uid, true);
            window.open('another_page.php','_self');
        }
      }

Firebase的执行停止,Chrome控制台中的VERBOSE( [违规]避免在www.gstatic.com/firebasejs/3.6.8/firebase.js//strong第362行使用document.write() >)出现。

问候!

答案 1 :(得分:0)

由于没有给出实际的解决方案,我认为值得分享我能够拼凑的解决方案。我拼凑的解决方案是使用.then强制.set()完全运行,然后再加载下一个屏幕。如下所示。

firebase.database().ref().child('/churches/' + userName ).set(data).then( function(){     
    window.location = "Homepage.html";
});

由于我是编程新手,所以我不知道如何在作者的代码中实现此方法,但是,我相信上面的代码是原始代码试图实现的目标。如果您想了解.then的工作方式,则可以查找“ JavaScript中的承诺”。