我将3个事件附加到Firebase参考上,如下所示
`
fileRef.on('child_changed' , function(snapshot){
var file = snapshot.val()
changeFile()
})
fileRef.on('child_removed' , function(snapshot){
var file = snapshot.val()
removeFile()
})
fileRef.on('child_added' , function(snapshot){
var file = snapshot.val()
createFile()
})
` 每当订户更改文件的内容时,都会对正在进行更改的订户触发相同的事件“ child_changed”。作为已经在本地完成更改的用户,我不希望changeFile触发两次。如何避免这种情况?我尝试使用单个变量来进行区分,但有时会连续触发一系列事件,因此我不确定是否可以正常工作。
答案 0 :(得分:0)
使用Firebase进行更改时,通常应遵循CQRS pattern。通过这种方法,您可以将所有更改写入数据库,然后在事件从Firebase触发时可视化这些更改。听起来这对您来说是不可能的,但我仍然建议您考虑一下。
Firebase中没有内置任何东西可以阻止侦听器触发本地事件。但是,您可以跟踪本地客户端开始的每次写入(例如,通过跟踪所写入的每个项目的推送ID),然后在on("child_
处理程序中过滤掉这些ID。
例如,跟踪按键:
var newRef = ref.push(newData);
var newKey = newRef.key;
然后在您的听众中:
if (snapshot.key != newKey) {
...
}
当然,如果本地客户端可以有多个挂起的写操作,则需要跟踪数组中的写操作。