直接在on()回调Firebase中使用off()?

Dan*_*nze 6 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();
}); 
Run Code Online (Sandbox Code Playgroud)

我可以off()直接在on()回调中执行吗?我不需要指定eventType正确的?

还有什么不能清理的吗?

从文档:
同样,如果未指定eventType或回调,则将删除引用的所有回调.

Jos*_*ier 5

我可以off()直接在on()回调中执行吗?

是。

我不需要指定eventType正确吗?

正确。docs指出,如果eventType省略,则该参考的所有回调将被删除。

您也可以.off()像这样链接方法,而不是在回调内部调用它:

var q = ref.child('users').child(targetUserId).child('chat');
q.on('child_added', function(obj) {
  obj.ref().remove();
}).off();
Run Code Online (Sandbox Code Playgroud)

正如Frank van Puffelen在评论中建议的那样,您也可以使用该.once()方法,以使回调仅执行一次:

var q = ref.child('users').child(targetUserId).child('chat');
q.once('child_added', function(obj) {
  obj.ref().remove();
});
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是您不必担心会无意中删除其他附加事件。

  • 我不赞成您可以将它们链接起来。[.on()返回回调函数,而不是`this`上下文引用](https://www.firebase.com/docs/web/api/query/on.html) (6认同)