我在移动应用中使用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
值调用?
答案 0 :(得分:2)
启动监听器时,位置responses/<request-id>
没有值。因此,Firebase客户端会触发value
值为null
的事件。
然后,当某个值写入responses/<request-id>
时,value
事件会再次使用新值触发。
如果您要删除responses/<request-id>
中的值,则会收到value
的另一个null
事件。