Firestore 事务争用而没有写入尝试?

Ben*_*der 5 javascript transactions firebase google-cloud-functions google-cloud-firestore

我正在分析显示错误“这些文档的争用太多。请重试”的日志。这里奇怪的是事务中的日志从未执行过,这似乎表明事务从未进行过写入尝试。在下面的示例中,错误表明存在争用runTransaction,但“正在更新文档”不在任何日志中。

如果没有对文档执行写操作(请注意,这些事务是更新这些文档的唯一方式),怎么可能存在争用?也就是说,如果从来没有任何写入,并且给定事务允许从事务外部读取,下面的代码怎么会导致争用?显然,我知道尝试写入的同一文档上的一些事务会引发争用,但在这种情况下,“更新文档”从未执行,因此不可能有写入尝试。

更简单地说:为了存在争用,需要有写调用;但要进行写入调用,需要触发“更新文档”;“更新文档”没有触发,因此不可能有写入调用,因此不应该存在争用。

return db.runTransaction((transaction) => {
   return transaction.get(query).then((querySnapshot) => {
      console.log("Updating documents");
      [transaction code here to update documents]
   }
});
Run Code Online (Sandbox Code Playgroud)