Javascript 每隔一段时间更新firebase条目

Javascript 每隔一段时间更新firebase条目,javascript,firebase,firebase-realtime-database,momentjs,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 = childSn

我希望能够每隔一分钟更新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的主分支上。

使用
setInterval()
每X英里秒触发一次函数

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

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

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

有了这个,你就可以编写你的函数了。应该是这样的

const serverTime = firebase.database.ServerValue.TIMESTAMP;
setInterval(() => {
  database.ref('myNode').once('value',(snapshot) => {
    const updatedDate = snapshot.val() && snapshot.val().storageTime ? snapshot.val().storageTime - serverTime : serverTime;
    snapshot.ref().update({ storageTime: updatedDate })
  });
}, 5000);
将此代码视为示例,而不是复制/粘贴解决方案


希望它有帮助。

轮询数据库没有意义,而是告诉它您想要侦听值(更改)事件

重要提示:每次在服务器上更改数据时,都会调用value事件 指定的数据库引用,包括对子项的更改。限制 快照的大小,仅在所需的最低级别进行附加 观察变化。例如,将侦听器附加到 不建议使用您的数据库。下面的示例演示了一个 社交博客应用程序从中检索帖子的星级计数 数据库:

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

我还想添加一个条件,仅当在常量定义中firebase“serverTime”而不是“ServeTime”中存在元素时才执行此操作。此外,在每次调用事件侦听器时,请使用
.once
而不是
.on
来添加事件侦听器。