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

时间:2016-05-05 08:42:05

标签: firebase firebase-realtime-database

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

具体来说,我想得到用户按下语音留言的发送按钮的时间。在上传成功之前,我实际上并未将消息推送到Firebase(以便在收件人收到消息时保证音频文件存在)。如果我只是使用Firebase.ServerValue.TIMESTAMP,由于上传持续时间不同,可能会出现订购问题。 (例如,很长一段时间后的非常短的消息。)

无论如何要ping Firebase以获取我在文档中看不到的时间戳吗?谢谢!

1 个答案:

答案 0 :(得分:3)

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

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

这做了一些事情:

  1. 在上传之前为项目项创建参考。在上传开始时,此引用将具有基于的推送ID 。此时没有任何内容写入数据库,但确定了新位置的键。

  2. 然后进行上传并等待#34;完成。

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

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

  5. 所以你现在有两个时间戳。一种是上传开始并编码到新项目的键/推送ID中,另一种是上传完成并位于savedTimestamp属性中。

    要获取已完成的3个最近启动的上传:

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

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

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