firebase:获取日期大于现在的记录

时间:2013-06-14 16:36:56

标签: javascript firebase

我正在将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事件。然后我检查它是否在页面加载后创建,并相应地提醒用户。但是客户只需要提醒从现在开始添加的孩子。我怎样才能摆脱那种不必要的负担?我查了一下文档,但找不到答案。

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。

1)在新孩子的优先级中编码事件发生的时间戳,然后使用“startAt”修剪旧元素。

确保您的时间编码按时间顺序按字面排序。

例如:

ref.startAt("2013-06-14 10:11:13").on(...);

生成带时间戳的项目时,您需要使用Firebase服务器时间,以便每个人都使用相同的时钟。请参阅serverTimeOffset: https://www.firebase.com/docs/managing-presence.html

2)为每个用户设置不同的事件队列,并让用户的客户端在看到队列后从队列中删除元素。

此解决方案最适用于每个用户可能收到不同通知的情况,例如在社交网络中。