我有两个Firebase查询,一个用于向节点添加ID(名为blocklist),另一个用于从同一节点删除ID。
它们均由两个按钮之一触发:“阻止”按钮和“解锁”按钮。
这些是功能:
function blockUser(){
// friendToBlock is the ID I want to add to the block list:
var friendToBlock = document.getElementById('hiddenUid').innerHTML;
// globaluid is the currently logged in user's ID:
firebase.database().ref('users/'+globaluid+'/blocklist/').push({
blockedId:friendToBlock
});
console.log(friendToBlock+" is now blocked!");
}
function unblockUser(){
// friendToUnblock is the ID I want to remove from the block list:
var friendToUnblock = document.getElementById('hiddenUid').innerHTML;
var blockedRef = firebase.database().ref('users/'+globaluid+'/blocklist/');
var blockedQuery = blockedRef.orderByChild('blockedId').equalTo(friendToUnblock);
blockedQuery.on('child_added', function(blockedSnapshot) {
blockedSnapshot.ref.remove(function (error) {
if (!error) {
console.log(friendToUnblock+" should now be unblocked.");
}
});
});
}
这两个功能在我第一次运行应用程序时运行正常,但是如果我再次单击“阻止”,“取消阻止”然后再“阻止”,则第二个阻止事件会因某种原因触发这两个功能。
我打开了Firebase控制台,可以看到正在创建的blocklist
节点,然后在半秒后立即被删除,这意味着“阻止”按钮正在触发这两个功能。
出于某种原因,在打开应用程序后第一次按下按钮时不会发生这种情况,只有在按下“取消阻止”按钮后按“阻止”按钮时才会发生这种情况。
我无法弄清楚我的代码可能出现什么问题,我想知道Firebase在删除数据库中同名节点后创建节点的速度有限制吗?
我非常感谢您提供任何帮助或建议,谢谢!
答案 0 :(得分:0)
经过一段时间的努力,我已经能够解决它了。
我认为这个问题是由这条线引起的:
blockedQuery.on('child_added', function(blockedSnapshot) ...
当blockUser();
重新创建阻止列表节点时,似乎会继续监听并触发。
我把它改为:
blockedQuery.once('value', function(blockedSnapshot) ...
现在它正确添加和删除blocklist
节点,没有错误。