Firebase:从事务返回批量写入

时间:2020-10-28 21:05:13

标签: javascript firebase google-cloud-firestore transactions batching

在某些情况下,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);
  });

0 个答案:

没有答案