我正在使用 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();
}`
}`
我做错了什么?
提前致谢。
答案 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中的承诺”。