作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!