【问题标题】:Firebase remove strange behaviourFirebase 移除奇怪的行为
【发布时间】:2013-04-16 18:05:44
【问题描述】:

我的应用中有以下代码

this.obsRef.remove(function(error) {
      self.firebaseRef.child('users/'+self.user.name+'/invite')
               .remove(function(error) {
                    self.enterLobby();
                });
            });

代码应该做的是从firebase中删除obsRef,然后删除 'users/$user/invite' 上的位置。全部删除后 enterLobby 被调用。

现在问题出在 enterLobby() 上,我得到了以下代码:

this.userListRef.child(this.user.name).child('invite')
             .on('child_added', function(snapshot) {
           console.log("INVITE");
        });

而且enterLobby()里面的代码每次都会执行。 我遗漏了一些东西,或者 .remove() 的回调没有按预期工作? 谢谢

【问题讨论】:

    标签: javascript firebase


    【解决方案1】:

    .on('child_added') 处理程序将确保每次添加孩子时都会调用提供的回调。这就是您看到代码执行多次的原因。您可能想改用.once('value')

    this.userListRef.child(this.user.name).child('invite').
      once('value', function(snapshot) { console.log("INVITE"); });
    

    【讨论】:

    • 我需要 .on() 因为可以添加多个孩子。问题是在调用 enterLobby() 之前多次调用以确保 this.userListRef.child(this.user.name).child('invite').off().
    • 是什么触发了删除?每个 remove 回调只会被调用一次,所以如果 remove 本身被多次触发,enterLobby() 也会被调用。
    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多