Javascript 下班后还打电话吗?
我的情况是,即使我对引用调用Javascript 下班后还打电话吗?,javascript,firebase,Javascript,Firebase,我的情况是,即使我对引用调用off,它也会不断调用回调 var ref = new Firebase('https://stackoverflow.firebaseio.com/31069762'); for (var n = 0; n < 1024; ++n) { ref.push(n) } ref.on('child_added', function(snapshot) { if (snapshot.val() > 10) { console.log('of
off
,它也会不断调用回调
var ref = new Firebase('https://stackoverflow.firebaseio.com/31069762');
for (var n = 0; n < 1024; ++n) {
ref.push(n)
}
ref.on('child_added', function(snapshot) {
if (snapshot.val() > 10) {
console.log('off') // Printed multiple times.
ref.off();
}
});
var ref=new Firebase('https://stackoverflow.firebaseio.com/31069762');
对于(变量n=0;n<1024;++n){
参考推力(n)
}
参考on(“添加子项”),功能(快照){
如果(snapshot.val()>10){
console.log('off')//打印多次。
参考关闭();
}
});
当您调用off()
时,它将停止Firebase客户端为传入的新数据触发child\u添加的
事件。它不会阻止它为客户端已经收到的数据触发child\u added
事件
你可以通过这种方式获得一些有趣的行为。例如,您的代码片段:
var ref = new Firebase('https://stackoverflow.firebaseio.com/31069762');
ref.remove();
for (var n = 0; n < 1024; ++n) {
ref.push(n)
}
ref.on('child_added', function(snapshot) {
console.log(snapshot.val());
if (snapshot.val() > 10) {
console.log('off') // Printed multiple times.
ref.off();
}
});
当您注册侦听器时,ref的数据作为“一个初始数据包”下载,并从那里触发所有添加的child\u事件
现在让我们改变一下代码:
var ref = new Firebase('https://stackoverflow.firebaseio.com/31069762');
ref.remove();
ref.on('child_added', function(snapshot) {
console.log(snapshot.val());
if (snapshot.val() > 10) {
console.log('off') // Printed multiple times.
ref.off();
}
});
for (var n = 0; n < 1024; ++n) {
ref.push(n)
}
因此,通过这个命令,它会立即停止。因为我们在没有任何数据之前就开始监听child\u added
,所以初始有效负载是空的,之后我们会将每个child作为一个单独的更新
请注意,这一切都取决于Firebase客户端的内部结构,我还没有检查它在那里的实际工作方式。所以我上面提到的“一个初始数据包”就是如何将其可视化
如果您真的不想在10
之后处理数据,我可以考虑两种解决方案
你已经做的一件事:保持一个本地的“我完成了”标志
使用查询
限制Firebase下载的数据,而不是筛选客户端:
ref.orderByValue().endAt(10).on('child_added'...
请注意,orderByValue
是在Firebase JavaScript SDK的2.2.7版中引入的。我花了一段时间才弄明白为什么我不能在JSBin中使用它-/
ss
是一个事件,那么ss.val().end
应该是什么呢?@Barmar:它只是一个值。它与问题有什么关系?Event
没有val()
方法,因此它在尝试调用ss.val()
时应该会出错。这将阻止执行segmentsRef.off()
。@Barmar:说得好。但是,ss不是事件
而是快照
请参见:segmentsRef.off()
被调用。啊,我以为那是jQuery。on()
,我不知道Firebase也有这样一个方法。好的。这可能应该记录在某个地方。特别是因为所有其他事件API保证在“off/removeEventListener”之后不会再次调用回调。同意。我们将跟踪人们多久会遇到这种情况。到目前为止,你是我第一个知道的人。在今天之前,我绝对没有注意到这种行为,可能是因为我非常专注于使用查询来最小化到达客户的数据。
1
2
.
.
.
11
"off"
ref.orderByValue().endAt(10).on('child_added'...