gpt4 book ai didi

javascript - 获取文档时出错 : clientDetails Error: Cannot modify a WriteBatch that has been committed

转载 作者:行者123 更新时间:2023-12-02 22:22:32 25 4
gpt4 key购买 nike

我在 Firestore 批量更新中收到此错误的原因是什么? promise 作为批量提交返回,并且批处理是在循环内创建的。我无法理解这个问题。有什么建议吗?

export const updateUserDetailsTypeform = functions.firestore.
document('responseClientDetails/{case}').onCreate((snap, context) => {

const newValue = snap.data();
const caseReference = snap.id;
var batch = db.batch();

var reg = "[^£]*£[^£]*";
const uid = caseReference.match(reg);
if (uid && newValue) {

let document = db.collection("responseClientDetails").doc(caseReference);
let refDoc = db.collection("clientDetails").doc(uid[0])
batch.update(refDoc,{ has_seen_setup: "true" })


document.get().then(function (doc: any) {
if (doc.exists) {
let refNo = db.collection("clientDetails").doc(uid[0])
for (let [key, value] of Object.entries(doc.data())) {
const keyValue = key;
const valueValue = value;
batch.update(refNo, { [keyValue]: valueValue })
// promises.push(db.collection("clientDetails").doc(uid[0]).update({ [keyValue]: valueValue }))
}

}else{
console.log("document does not exist")
}
}).catch(function (error: any) {
console.log("Error getting document: clientDetails", error);
});



return batch.commit().then(function () {
console.log("updated clientDetails")
return null

});

}


});


最佳答案

您必须确保仅在执行所有更新后才调用 batch.commit()。您的代码现在所做的是在调用第二次更新之前提交。

问题在于 get() 是异步的,并且在查询完成之前立即返回。如果您添加一些日志记录语句,您将更好地了解发生了什么。您需要做的是等到从 get() 返回的 promise 完全解决后再提交批处理。这意味着您对 batch.commit() 的调用可能应该出现在 then 回调中。

关于javascript - 获取文档时出错 : clientDetails Error: Cannot modify a WriteBatch that has been committed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59181203/

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