按间隔更新firebase条目

时间:2017-09-16 05:23:59

标签: javascript firebase firebase-realtime-database momentjs

我希望能够在一小段时间内更新firebase条目中的某些值。我不知道如何做到这一点,但尝试了以下内容:

var interval = setInterval(function(){
  database.ref().on('value',function(snapshot){
    snapshot.forEach(function(childSnapshot) {
        var item = childSnapshot.val();
        item.key = childSnapshot.key;
        database.ref(item.key).update({ item.trainTimeLeft: moment(item.trainFrequency).subtract(moment(moment(Date.now())).diff(item.trainTimeStamp,"minutes"),"minutes") });

    });
  });

},60000);

我正在使用moment.js来表示时差(我正在尝试更新列车时刻表)。所有条目都在firebase的主要分支上。

2 个答案:

答案 0 :(得分:2)

使用setInterval()每X英里秒启动一次功能。

使用firebase.database.ref()访问要更新的数据库节点。

使用.update()更新数据库节点值。

使用firebase.database.ServerValue.TIMESTAMP获取服务器时间。由于不同的时区,使用客户端时间戳是不安全的。

有了这个你可以编写你的功能。它应该看起来像这样

const servetTime = firebase.database.ServerValue.TIMESTAMP;
setInterval(() => {
  database.ref('myNode').on('value',(snapshot) => {
    snapshot.val() &&
    const updatedDate = snapshot.val().storageTime ? snapshot.val().storageTime - serverTime : serverTime;
    snapshot.ref().update({ storageTime: updatedDate })
  });
}, 5000);

仅将此代码视为示例,而不是复制/粘贴解决方案。

希望它有所帮助。

答案 1 :(得分:0)

在轮询数据库时没有任何意义,而是告诉它你想要监听价值(变化)事件。

来自Read and Write Data on the Web

  

重要提示:每次更改数据时都会调用value事件   指定的数据库引用,包括对子项的更改。要限制   快照的大小,仅在所需的最低级别附加   看着变化。例如,将侦听器附加到根目录   不推荐您的数据库。以下示例演示了一个   社交博客应用程序从中检索帖子的星号   数据库:

var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
  updateStarCount(postElement, snapshot.val());
});