Firebase提交后的批处理写入处于什么状态



问题

使用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) // 👈
}

相关内容

  • 没有找到相关文章

最新更新