作者:平凡淘你 | 来源:互联网 | 2023-05-24 00:13
假设我有一个完成的操作.像删除一样.
var q = ref.child('users').child(targetUserId).child('chat');
q.on('child_added', function(obj) {
obj.ref().remove();
//This works right?
q.off();
});
我可以off()
直接在on()
回调中执行吗?我不需要指定eventType
正确的?
还有什么不能清理的吗?
从文档:
同样,如果未指定eventType或回调,则将删除引用的所有回调.
1> Josh Crozier..:
我可以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();
正如Frank van Puffelen在评论中建议的那样,您也可以使用该.once()
方法,以使回调仅执行一次:
var q = ref.child('users').child(targetUserId).child('chat');
q.once('child_added', function(obj) {
obj.ref().remove();
});
这种方法的好处是您不必担心会无意中删除其他附加事件。
我不赞成您可以将它们链接起来。[.on()返回回调函数,而不是`this`上下文引用](https://www.firebase.com/docs/web/api/query/on.html)