如何限制在发布Firebase更改的订户端进行更改?

时间:2019-10-16 01:20:36

标签: javascript firebase firebase-realtime-database

我将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触发两次。如何避免这种情况?我尝试使用单个变量来进行区分,但有时会连续触发一系列事件,因此我不确定是否可以正常工作。

1 个答案:

答案 0 :(得分:0)

使用Firebase进行更改时,通常应遵循CQRS pattern。通过这种方法,您可以将所有更改写入数据库,然后在事件从Firebase触发时可视化这些更改。听起来这对您来说是不可能的,但我仍然建议您考虑一下。

Firebase中没有内置任何东西可以阻止侦听器触发本地事件。但是,您可以跟踪本地客户端开始的每次写入(例如,通过跟踪所写入的每个项目的推送ID),然后在on("child_处理程序中过滤掉这些ID。

例如,跟踪按键:

var newRef = ref.push(newData);
var newKey = newRef.key;

然后在您的听众中:

if (snapshot.key != newKey) {
  ...
}

当然,如果本地客户端可以有多个挂起的写操作,则需要跟踪数组中的写操作。