Firebase'价值'首先使用null值调用事件处理程序,然后使用实际值

时间:2016-05-18 18:54:25

标签: firebase

我在移动应用中使用firebase-queue将一些工作卸载到服务器上。我通过请求将任务发送到firebase队列并开始收听&#39; value&#39; responses/<request-id>处的事件以获取任务的响应。 firebase队列工作人员将接收任务,处理该任务并将结果设置为responses/<request-id>

我观察到value事件处理程序被调用两次,最初使用空值,然后是实际响应。我有这个示例代码,可用于模拟行为

client.js

var Firebase = require('firebase');

var ref = new Firebase('https://propertyfindercp.firebaseio.com');

ref.child('responses/<request-id>').on('value', function(snapshot) {
  console.log('Value event ', snapshot.val());
});

worker.js

var Firebase = require('firebase');

var ref = new Firebase('https://propertyfindercp.firebaseio.com');
ref.child('responses/<request-id>').set({data: 123});

只需将两个文件中的<request-id>替换为相同的随机值,然后使用client.js运行node client.js文件,然后使用worker.js运行node worker.js }

我在客户端控制台上观察到以下输出

Value event  null
Value event  { data: 123 }

我期待只看到第二行。为什么value事件处理程序也使用null值调用?

1 个答案:

答案 0 :(得分:2)

启动监听器时,位置responses/<request-id>没有值。因此,Firebase客户端会触发value值为null的事件。

然后,当某个值写入responses/<request-id>时,value事件会再次使用新值触发。

如果您要删除responses/<request-id>中的值,则会收到value的另一个null事件。