运行多个 firestore batch.commit()

Col*_*ore 2 javascript firebase google-cloud-platform google-cloud-firestore

我有一个网络应用程序,用户可以通过表单输入创建多个 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")
            });
Run Code Online (Sandbox Code Playgroud)

但是,在batch.commit()成功后,如果用户再次填写表单以创建另一组要写入的文档,则会出现错误:调用commit()后,无法再使用写入批处理。有没有办法连续多次调用batch.commit()?我认为在 batch.commit() 之后返回一个值会“清理”该函数以再次使用它,但仍然出现错误。

Fra*_*len 6

听起来您正在重用batch已提交的同一对象,这确实是不允许的。

提交第一个批处理对象后,您需要创建一个新的批处理对象。

所以像这样:

batch.commit();
batch = null;
Run Code Online (Sandbox Code Playgroud)

这样您就可以在提交表单时检查是否需要创建新批次:

if (batch == null) {
  batch = db.batch();
}
... add item to batch
Run Code Online (Sandbox Code Playgroud)