在推送数据之前获取 Firebase 时间戳

Getting Firebase timestamp before pushing data

我有一个由 Firebase 提供支持的聊天应用程序,我想在推送任何数据之前从 Firebase 获取时间戳。

具体来说,我想获取用户按下语音消息发送按钮的时间。在上传成功之前,我实际上并没有将消息推送到 Firebase(这样当收件人收到消息时,音频文件就可以保证存在)。如果我只是简单地使用 Firebase.ServerValue.TIMESTAMP,则可能会由于不同的上传持续时间而出现排序问题。 (例如,一条很长的消息之后的一条很短的消息。)

是否可以通过 ping Firebase 获取我在文档中没有看到的时间戳?谢谢!

如果要将点击与数据的实际写入分开:

var newItemRef = ref.push();
uploadAudioAndThen(audioFile, function(downloadURL) {
    newItemRef.set({
      url: downloadURL,
      savedTimestamp: Firebase.ServerValue.TIMESTAMP
    });
});

这有几件事:

  1. 它在上传之前为项目项目创建一个引用。此引用将有一个基于上传开始时间 的推送 ID。此时没有任何内容写入数据库,但新位置的密钥已确定。

  2. 然后上传并"waits for it"完成。

  3. 在上传的完成处理程序中,它写入它在步骤 1 中确定的新位置。

  4. 写入此时的服务器时间戳,即上传完成时

所以你现在有两个时间戳。一个是上传开始时,编码到新项目的 key/push id 中,另一个是上传完成时,在 savedTimestamp 属性.

获取已完成的 3 个最近开始的上传:

ref.orderByKey().limitToLast(3).on(...

获取最近完成的 3 个上传:

ref.orderByChild('savedTimestamp').limitToLast(3).on(...