Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在on()回调Firebase中直接使用off()?_Javascript_Firebase - Fatal编程技术网

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
。我不能肯定您可以将它们链接起来。