运行多个firestore batch.commit()



我有一个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")
});

相关内容

  • 没有找到相关文章

最新更新