on('child_added'VS一次('child_added

时间:2017-01-07 04:09:16

标签: firebase firebase-realtime-database

运行这两个代码应该有什么不同吗?

ref.on('child_added',function(child,prev){
 console.log(child.key+prev);
}
ref.off();

ref.once('child_added',function(child,prev){
 console.log(child.key+prev);
}

我很惊讶第二个不会在孩子们之间进行迭代!

我在这里做错了什么(编辑 - >)以获取孩子的完整列表

2 个答案:

答案 0 :(得分:7)

当您使用once时,您要求的是指定类型的单个事件。因此once("child_added"会触发一个child_added事件。

由于你订购电话的方式,你的on多次开火,这可能是竞争条件。我希望这也只能调用一次:

ref.on('child_added',function(child,prev){
  console.log(child.key+prev);
  ref.off();
}

但我必须承认这是非常罕见的,所以我不认为我曾经测试过它。

答案 1 :(得分:0)

除了@Puf的答案外,我还会在您应该了解的文档中添加以下报价:

  

添加查询以限制您的监听操作返回的数据并   使用仅下载更新数据的侦听器,例如on()   而不是一次()。保留.once()用于真正不做的动作   需要数据更新。

来源:https://firebase.google.com/docs/database/usage/optimize

另一个有用的链接:https://firebase.google.com/docs/database/usage/billing