使用带有事务的`once`回调检索Firebase值

时间:2014-10-01 21:44:48

标签: javascript node.js firebase

我想使用once方法从Firebase ref中检索数据,但是我没有在快照中接收任何数据。 这是简单的数据检索:

编辑经过进一步检查后,我发现在once值侦听器后不久就安排了一项事务。 (为简单起见,我将在此代码示例的侦听器之后直接放置事务 。)

dataRef.once('value', function (snapshot) {
  snapshot.val(); // returns `null`
});

dataRef.transaction(function (currentValue) {
  if (currentValue) {
    // make changes
  }
  return currentValue;
});

这个firebase ref有数据。为了验证,我尝试使用on代替once。在这种情况下,回调被调用两次:

dataRef.on('value', function (snapshot) {
  snapshot.val(); // returns `null` first, then called again and returns correct value
});

导致此行为的原因是什么?我希望快照在第一次调用回调时具有正确的值。否则,once方法没有用处。

1 个答案:

答案 0 :(得分:2)

transaction applyLocally中有第三个参数once

  

默认情况下,每次运行事务更新功能时都会引发事件。因此,如果它多次运行,您可能会看到中间状态。您可以将此值设置为false以禁止这些中间状态,而是等到事务完成后再引发事件。

由于此默认值,null值侦听器在事务首次在本地运行后触发,即使没有从服务器检索到数据(将currentValue作为事务传递&#39} ; s false)。通过将applyLocally作为once参数传递,此本地事件将被禁止,并且只有在从服务器检索到数据后才会调用dataRef.transaction(function (currentValue) { if (currentValue) { // make changes } return currentValue; }, function(){}, false); 回调:

{{1}}