我在移动应用程序中使用firebase-queue将一些工作卸载到服务器上。我用请求将任务发送到firebase队列,并开始侦听responses/<request-id>中的“value”事件,以获得任务的响应。防火墙队列工作器将接收任务,处理它,并在responses/<request-id>上设置结果。
我注意到,value事件处理程序被调用了两次,最初是使用null值,然后才是实际的响应。我有这个示例代码,它可以用来模拟行为
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>替换为相同的随机值,然后使用node client.js运行client.js文件,然后使用node worker.js运行worker.js
我在客户端控制台上观察到以下输出
Value event null
Value event { data: 123 }我本来以为只会看到第二行的。为什么value事件处理程序也使用null值调用?
发布于 2016-05-18 21:45:17
启动侦听器时,responses/<request-id>位置没有值。因此,Firebase客户端使用一个value值触发一个null事件。
然后,当一个值被写入responses/<request-id>时,value事件将再次使用新值触发。
如果要从responses/<request-id>中删除该值,则会得到另一个带有null的value事件。
https://stackoverflow.com/questions/37307959
复制相似问题