问题
使用batch.commit()
提交批处理后,执行的batch.set()
操作是否清除了变量?
解释
假设我有一份1000(左右)件物品的清单,我需要写信给Firestore。
我可以循环使用它们,每500个循环我就提交一批。
现在,循环继续(例如,在前500个元素之后),添加第501个、第502个。。。使用batch.set()
的第1000个元素
达到1000时,代码需要第二次执行batch.commit()
,但如果在第一次提交后没有重置批处理变量,则批处理中会有1000个元素,导致崩溃
示例代码
function batchWrite () {
const batch = writeBatch(db)
somearray.foreach((element: any, index :Number) => {
const someRef = doc(db, 'blablabla')
batch.set(someRef, element)
const indexDivBy500 = index / 500
//True if index is divisible by 500 without remainder
const commitBatch = (indexDivBy500 - Math.floor(indexDivBy500)) == 0;
if(commitBatch) {
batch.commit()
//something along the lines of batch.clear()?
//because after the commit, the foreach may continue with index 501...
}
})
}
在提交前一个批次后,需要调用createBatch
来创建新的批次。代码中:
if (commitBatch) {
batch.commit()
batch = writeBatch(db) // 👈
}