javascript - 通过可调用函数传递的 Firestore 时间戳
问题描述
我正在开发一个有助于项目管理的反应网络应用程序。我面临的问题是围绕 Firestore 的时间戳。存储在 Firestore 中的每个项目对象都有一个createdOn
Firestore 时间戳类型的字段。我的网络应用程序正在调用一个可调用的 firebase 函数,该函数获取所有项目并返回它们。问题是该toDate()
功能在网络应用程序中不起作用,但它在 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",
解决方案
“我想知道问题是否是在转换为 JSON 时 timeStamp 丢失了一些东西。”
是的,它失去了一些东西。Timestamp 将以这样的方式进行序列化,即其 seconds 和 nanoseconds 字段将单独发送。您必须从客户端收到的那些值中重新构建一个新的 Timestamp 对象。由于您没有显示非常具体的代码,因此不可能提供更多信息。我强烈建议您不要仅仅依赖于 Timestamp 的默认 JSON 序列化,而是专门在两端显式地读取和写入其 seconds 和 nanoseconds 字段。
另请参阅 Java 的相关问题:How to serialize Firestore TimeStamp in Android Java?
推荐阅读
- php - 在 JSON 文件中写入数据
- sql - 不确定 ROW_NUMBER 是否有效
- sql - MS-SQL 选择没有记录的行为空
- android - 如何在谷歌地图中绑定校园地图?
- python - 尝试复制 TFIDF 示例,乘法返回错误的数字
- html - 为什么html中visnetwork的图形布局太小
- excel - 在 Excel 名称管理器中添加名称时出错
- javascript - 如何将 onclick 事件添加到在 javascript 中创建的 img 元素
- tfs - 如何设置在 VSTS 上发布新 Wiki 版本的权限
- firebase - rxjs:如何从 Firestore 获取相关数据