Javascript 在on()回调Firebase中直接使用off()?
比如说,我做了一个一次性手术。比如删除Javascript 在on()回调Firebase中直接使用off()?,javascript,firebase,Javascript,Firebase,比如说,我做了一个一次性手术。比如删除 var q = ref.child('users').child(targetUserId).child('chat'); q.on('child_added', function(obj) { obj.ref().remove(); //This works right? q.off(); }); 我是否可以直接在on()回调中执行off()?我不需要指定eventType正确吗 没有别的要清理的了吧 : 类似地,如果未指定eventT
var q = ref.child('users').child(targetUserId).child('chat');
q.on('child_added', function(obj) {
obj.ref().remove();
//This works right?
q.off();
});
我是否可以直接在on()
回调中执行off()
?我不需要指定eventType
正确吗
没有别的要清理的了吧
:类似地,如果未指定eventType或回调,则将删除引用的所有回调 我是否可以直接在
on()
回调中执行off()
对
我不需要指定eventType是否正确
对。如文档所述,如果省略了eventType
,则将删除引用的所有回调
您也可以像这样链接.off()
方法,而不是在回调内部调用它:
var q = ref.child('users').child(targetUserId).child('chat');
q.on('child_added', function(obj) {
obj.ref().remove();
}).off();
与注释中一样,您也可以使用,以便回调只执行一次:
var q = ref.child('users').child(targetUserId).child('chat');
q.once('child_added', function(obj) {
obj.ref().remove();
});
这种方法的好处是不必担心无意中删除其他附加事件。
如果你再次打开和关闭它,你可以考虑使用<代码>曾经的< /C> >。(estimatedServerTimeMs-5000)。一次(…)-但是remove()
只会删除一条记录(匹配集中的第一条记录)。将一次
更改为打开
将删除所有匹配的记录。知道原因吗?使用一次
Firebase时,只会触发一个事件。因此,如果添加了子项
,则只会触发单个子项(无论有多少子项匹配查询)。对于您最初的问题,这正是您所需要的。但实际上,对于您评论中的用例,请在正确的条件下坚持使用on('child_added'
和off
,或者使用一次('value'
),然后在快照中的子对象上使用forEach
。我不能肯定您可以将它们链接起来。