我有一个web应用程序,用户可以通过表单输入创建多个firestore文档。我正在使用batch.commit()成功地将这些对象添加到集合中。
arrayOfObjectsFromForm.forEach((object) => {
var docRef = db.collection("CollectionName").doc();
batch.set(docRef, object);
})
await batch.commit().then(() => {
console.log("committed batch write to firestore!")
return alert("success")
});
然而,在成功执行batch.commit()之后,如果用户再次填写表单以创建另一组文档来写入,则会出现错误:在调用commit()之后,写批处理不能再使用。是否有一种方法可以在一行中多次调用batch.commit() ?我认为在batch.commit()之后返回一个值会"清理"。函数再次使用它,但仍然得到错误。
听起来您正在重用您已经提交的相同的batch
对象,这确实是不允许的。
一旦提交了初始的批处理对象,你需要创建一个新的批处理对象。
比如:
batch.commit();
batch = null;
这样您就可以检查是否需要在表单提交时创建一个新的批处理:
if (batch == null) {
batch = db.batch();
}
... add item to batch
最终解决方案很简单
var batch = db.batch() //use to write multiple documents
arrayOfObjectsFromTheForm.forEach((object) => {
var docRef = db.collection("CollectionName").doc();
batch.set(docRef, object);
})
await batch.commit().then(() => {
console.log("committed batch write to firestore!")
//reset batch so it can be used again
batch = db.batch()
return alert("success")
});