gpt4 book ai didi

javascript - 当我尝试插入它时,firebase.firestore.FieldValue.serverTimestamp() 创建了一个 "modified"快照条目

转载 作者:行者123 更新时间:2023-12-02 23:36:02 24 4
gpt4 key购买 nike

抱歉,我不知道这是一个问题,还是我无法以正确的方式使用它,

我面临的问题是..

我正在尝试创建一个包含某些字段的新文档,并且创建了一个字段,当我尝试使用 onSnapshot() 监听器检索新输入的文档时,就会出现问题。onSnapshot() 监听器会被触发两次,类型为 added ,紧接着类型为 modified ,只是因为 firebase.firestore.FieldValue 的值。 serverTimestamp() 不是同时插入的。

这是添加文档的代码片段

            senderid : this.buddy.senderId,
receiverid: this.buddy.receiverId,
message : msg,
created: firebase.firestore.FieldValue.serverTimestamp()

这是读取文档的代码:

   this.db.collection(this.collectionName.friendsCollection).doc(this.buddy.docid)
.collection(this.collectionName.chatsCollection).orderBy('created')
.onSnapshot(snapshot=> {
skip.buddymessages = [];
if(snapshot.empty)
{
console.log("First Chat");
}
else{
console.log("size",snapshot.size)
snapshot.docChanges.forEach(change => {
if (change.type === 'added') {
console.log('New : ', change.doc.data());
}
if (change.type === 'modified') {
console.log('Modified : ', change.doc.data());
}
if (change.type === 'removed') {
console.log('Removed : ', change.doc.data());
}
});

这是控制台屏幕截图:- Error

最佳答案

您所看到的是预期的行为。客户端在添加时会看到自己的文档信息(您的“添加”回调 - 这被视为 an event for a local change ),但由于时间戳是在服务器上计算的,因此该时间戳稍后会写入服务器上,并最终同步回来发送给客户端(您的“修改后”回调)。链接的文档显示了如何判断快照是否有尚未在服务器上完全提交的待处理写入。

Retrieved documents have a metadata.hasPendingWrites property that indicates whether the document has local changes that haven't been written to the backend yet. You can use this property to determine the source of events received by your snapshot listener:

db.collection("cities").doc("SF")
.onSnapshot(function(doc) {
var source = doc.metadata.hasPendingWrites ? "Local" : "Server";
console.log(source, " data: ", doc.data());
});

关于javascript - 当我尝试插入它时,firebase.firestore.FieldValue.serverTimestamp() 创建了一个 "modified"快照条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com