在某些情况下,firebase无法正确更新数据库中的库存值时出现问题。我正在使用FieldValue.increment(),它在大多数情况下都有效,但是由于某些原因,即使没有来自Firebase的错误消息,它也可能不会更新1%的时间。我正在查看Firebase文档,似乎在重试或失败的情况下需要对数据库幂等写入。我当时在考虑使用事务检查数据库是否在更新之前发生了更改,但是我的代码当前正在使用批处理写入多个集合。
我想知道是否可以从Firebase中的事务返回批量写入提交?我知道您可以在事务内部进行写操作,但是如果创建了一个批处理,然后基于事务的读取操作,您提交或不提交该批写操作,那么会出现任何问题吗?当我运行该程序时似乎工作正常,但我担心可能没有看到潜在的边缘情况。这是我正在谈论的示例...
const batch = db.batch();
const ref1 = db.collection('references').doc('referenceId1');
const ref2 = db.collection('references').doc('referenceId2');
batch.update(ref1, {completed: true});
batch.set(ref2, ...)
return db.runTransaction((transaction)=> {
return transaction.get(ref1).then((doc) => {
const document = doc.data();
if(!ref1.completed){
return batch.commit()
}
})
})
.then(function() {
console.log("Transaction successfully committed!");
}).catch(function(error) {
console.log("Transaction failed: ", error);
});