通过可调用函数传递的Firestore时间戳

时间:2019-06-03 03:07:26

标签: javascript firebase google-cloud-firestore google-cloud-functions

我正在开发一个可帮助项目管理的React Web应用程序。我面临的问题与Firestore的时间戳有关。 Firestore中存储的每个项目对象都有一个createdOn字段,其类型为Firestore时间戳。我的Web应用程序正在调用可调用的firebase函数,该函数将获取所有项目并返回它们。问题是toDate()函数在Web应用程序中不起作用,但在firebase函数中起作用。我想知道问题是否是在转换为JSON时timeStamp丢失了一些东西。我是否缺少某些物品,还是应该将它们存储为物品?我真的不想转换所有日期服务器端,因为那样会减慢函数调用的速度。我正在使用时间戳在客户端进行过滤和分析。

我如何将时间戳记作为项目对象的一部分:createdOn: admin.firestore.Timestamp.now(),

,然后在可调用函数中对此进行测试:console.log(allProjects[0].createdOn!.toDate()),此方法有效。

在我的网络应用中,我将此称为data.createdOn.toDate(),并收到错误消息TypeError: data.createdOn.toDate is not a function

任何帮助将不胜感激。 谢谢,

我在功能方面使用

"firebase-admin": "^8.0.0",
"firebase-functions": "^2.3.1",

和客户端

"firebase": "^6.1.0",
"typescript": "^3.5.1"
"react": "^16.8.6",

1 个答案:

答案 0 :(得分:1)

“我想知道问题是否出在时间戳转换为JSON时。”

是的,它失去了一些东西。时间戳将被序列化,以使其秒和纳秒字段分别发送。您将不得不根据客户端上收到的那些值来重新构建new Timestamp object。由于您没有显示非常具体的代码,因此实际上不可能提供更多信息。我强烈建议您不仅依赖于时间戳的默认JSON序列化,而且应该明确地在两端明确读写秒和纳秒字段。

另请参阅Java相关问题:How to serialize Firestore TimeStamp in Android Java?