Firestore批处理写入是否像Transaction那样回滚



尝试使用FirestoreBatch编写500多个文档。我想知道如果任何批处理写入失败,是否所有的批处理写入都会自动回滚。如果没有,我该如何实现这一点,是否有任何方法可以克服Transaction的500次写入限制。

const BATCH_CHUNK = 500
const batches = []
for (let i = 0; i < snapshot.docs.length; i += BATCH_CHUNK) {
const batch = db.batch()
snapshot.docs.slice(i, i + BATCH_CHUNK).forEach(doc => {
batch.update(doc.ref, { committed: true })
})
batches.push(batch.commit())
}
await Promise.all(batches)

批处理写入实际上是以原子方式执行的。如果其中一个写入被say安全规则拒绝,那么该批中的其他写入也会被拒绝。因此,要么一个批处理中的所有写入都已提交,要么没有一个提交。

最新更新