Javascript 使用firebase.database.ServerValue.timestamp时,是否有方法获取实际时间戳?

Javascript 使用firebase.database.ServerValue.timestamp时,是否有方法获取实际时间戳?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,这个问题是关于javascript客户端的 我有这样的代码: const localEvents = []; const fbEvents = firebase.database().ref("myevents"); fbEvents.on("child_added", function(snapshot) { const e = snapshot.val(); localEvents.push(e); }); function createEvent(e) { e.time =

这个问题是关于javascript客户端的

我有这样的代码:

const localEvents = [];
const fbEvents = firebase.database().ref("myevents");

fbEvents.on("child_added", function(snapshot) {
  const e = snapshot.val();
  localEvents.push(e);
});

function createEvent(e) {
  e.time = firebase.database.ServerValue.TIMESTAMP;
  fbEvents.push(e);
}

调用createEvent{}后,我的localEvents列表中的条目的时间值似乎与数据库中的实际条目不相等。客户端猜测时间戳,并在实际往返服务器之前调用添加的child_处理程序。有没有办法避免这种情况,和/或在已知时间的实际值时有没有办法获得回调?

仅使用侦听器中的快照无法确定时间戳是来自服务器还是在本地猜测

您可以改为使用从fbEvents.push返回的承诺来确定写入何时实际成功。一个明确的承诺,这意味着它肯定是写给Firebase的。之后得到的侦听器回调将包含服务器的更新值


请注意,使用Firestore可以确定文档是否已完全写入服务器。只是不使用实时数据库。

谢谢!所以我应该在每个事件中添加我自己的uuid,然后在fbEvents.push中添加一个,通过localEvents并根据uuid找到问题的事件。我将使用hashmap,但想法是一样的,并且更新时间?或者有更好的方法吗?你不需要UUID。您可以只存储这样一个事实,即该特定位置/引用在推送承诺中更新,并在触发时检查侦听器中的值,以了解时间戳是否实际更新。我不认为侦听器在时间戳实际更新后被触发-我是否遗漏了什么?哦,您使用的是child_added,它只在新的子对象上触发。如果您使用child_changed或value,您将看到更新。