我正在将Firebase用于具有多个用户的管理面板。每当添加新问题时,面板中的每个人都会立即收到警报。
它工作正常,但我实现它的方式感觉不对。这就是我正在做的事情:
dataRef.auth(token, function(error, result) {
if (error) {
console.log("Login Failed!", error);
} else {
var started = new Date();
dataRef.on('child_added', function(snapshot) {
var message = snapshot.val();
var t = message.date.split(/[- :]/);
var lastChildDate = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
if(lastChildDate > started) {
// alert the user
}
});
}
});
这就是数据结构。它只有一个字段:
{date: "2013-06-14 16:45:10"}
这会带来该基地的所有记录。所有记录都会触发child_added
事件。然后我检查它是否在页面加载后创建,并相应地提醒用户。但是客户只需要提醒从现在开始添加的孩子。我怎样才能摆脱那种不必要的负担?我查了一下文档,但找不到答案。
答案 0 :(得分:1)
有几种方法可以解决这个问题。
1)在新孩子的优先级中编码事件发生的时间戳,然后使用“startAt”修剪旧元素。
确保您的时间编码按时间顺序按字面排序。
例如:
ref.startAt("2013-06-14 10:11:13").on(...);
生成带时间戳的项目时,您需要使用Firebase服务器时间,以便每个人都使用相同的时钟。请参阅serverTimeOffset: https://www.firebase.com/docs/managing-presence.html
2)为每个用户设置不同的事件队列,并让用户的客户端在看到队列后从队列中删除元素。
此解决方案最适用于每个用户可能收到不同通知的情况,例如在社交网络中。