javascript - 更新 Firestore 数据时间戳为空
问题描述
当我接受订单时,我有一个订单的实时监听器有一个名为“status”的字段更新,另一个字段被添加名为“datetime_accepted”
这是监听文档更改的监听器
db.collection('ORDERS').where('status', '==', 'a').orderBy('datetime_accepted')
.onSnapshot(querySnapshot => {
querySnapshot.docChanges().forEach(change => {
if (change.type === 'added') {
var id = change.doc.id
var snapJSON = JSON.stringify(change.doc.data());
var orderOBJ = JSON.parse(snapJSON);
orderOBJ.oid = id;
var confirm_datetime = new Date(orderOBJ.datetime_accepted.seconds*1000).toLocaleString();
这是我正在运行以更新字段的单独功能
db.collection("ORDERS").doc(id).update({
"datetime_accepted": firebase.firestore.FieldValue.serverTimestamp(),
"status": "a"
})
更改订单状态时发生错误,但刷新时间戳后再次正常工作此问题仅在时间戳中实时更新
解决方案
这是预期的行为。有两件事要记住:
- 在文档实际到达服务器之前,服务器时间戳没有实际值
- Firestore 文档侦听器将在文档更改时立即触发,在文档到达服务器之前。
这意味着您的侦听器在更新到达服务器之前已接收到更新,并且该快照中不会有时间戳。
您的代码将需要通过处理未定义的时间戳值来检查这种特定情况。 阅读有关服务器时间戳如何工作的更多信息。
推荐阅读
- python - numpy数组的共享字典?
- python - Python Pandas - 根据另一个表的值对数据帧进行切片以匹配列名
- python - 从 pandas csv 读取时,我可以使用制表符或逗号作为分隔符吗?
- reactjs - 无法访问 React 的渲染方法中的属性
- c# - 保存网站寿命短的全球唯一代币?
- python - 无法从 MongoDB 中提取信息
- java - Jersey REST-Client WebTarget - 找不到内容类型的 MessageBodyReader
- reactjs - 嵌套对象的状态更新方法问题
- soap - 使用 PHP 连接到受 WS-Security 保护的 Soap Web 服务
- r - 数字预测器的逻辑回归?