我有一个由Firebase提供支持的聊天应用,我想在推送任何数据之前从Firebase获取时间戳。
具体来说,我想得到用户按下语音留言的发送按钮的时间。在上传成功之前,我实际上并未将消息推送到Firebase(以便在收件人收到消息时保证音频文件存在)。如果我只是使用Firebase.ServerValue.TIMESTAMP,由于上传持续时间不同,可能会出现订购问题。 (例如,很长一段时间后的非常短的消息。)
无论如何要ping Firebase以获取我在文档中看不到的时间戳吗?谢谢!
答案 0 :(得分:3)
如果要将点击与实际写入数据分开:
var newItemRef = ref.push();
uploadAudioAndThen(audioFile, function(downloadURL) {
newItemRef.set({
url: downloadURL,
savedTimestamp: Firebase.ServerValue.TIMESTAMP
});
});
这做了一些事情:
在上传之前为项目项创建参考。在上传开始时,此引用将具有基于的推送ID 。此时没有任何内容写入数据库,但确定了新位置的键。
然后进行上传并等待#34;完成。
在上传的完成处理程序中,它会写入它在步骤1中确定的新位置。
此时写入服务器时间戳,上传完成后
所以你现在有两个时间戳。一种是上传开始并编码到新项目的键/推送ID中,另一种是上传完成并位于savedTimestamp
属性中。
要获取已完成的3个最近启动的上传:
ref.orderByKey().limitToLast(3).on(...
获取3个最近完成的上传内容:
ref.orderByChild('savedTimestamp').limitToLast(3).on(...