Firebase数据库 - 创建和删除节点时出现奇怪的错误(Javascript)

时间:2017-02-06 16:58:07

标签: javascript firebase firebase-realtime-database

我有两个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在删除数据库中同名节点后创建节点的速度有限制吗?

我非常感谢您提供任何帮助或建议,谢谢!

1 个答案:

答案 0 :(得分:0)

经过一段时间的努力,我已经能够解决它了。

我认为这个问题是由这条线引起的:

blockedQuery.on('child_added', function(blockedSnapshot) ...

blockUser();重新创建阻止列表节点时,似乎会继续监听并触发。

我把它改为:

blockedQuery.once('value', function(blockedSnapshot) ...

现在它正确添加和删除blocklist节点,没有错误。