firebase transcation 第一次失败时,第二次调用哪个函数?

Which function will be called a second time when a firebase transcation fails the first time?

Firebase documentation 声明:

A function calling a transaction (transaction function) might run more than once if a concurrent edit affects a document that the transaction reads.

尚不清楚究竟哪个函数会在并发编辑时运行两次。在下面的示例中,outerFunc 调用了 runTranscation 方法,因此文档的字面解释意味着 outerFunc 可能会被调用两次。

然而,这似乎是一个奇怪的实现,我怀疑文档的意思是说 innerFunc 在并发编辑时可能会被调用不止一次。

import { runTransaction } from "firebase/firestore";

function outerFunc () {
  console.log('outerFunction');
  try {
    await runTransaction(db, async function innerFunc(transaction) {
      const sfDoc = await transaction.get(sfDocRef);
      if (!sfDoc.exists()) {
        throw "Document does not exist!";
      }

      const newPopulation = sfDoc.data().population + 1;
      transaction.update(sfDocRef, { population: newPopulation });
    });
    console.log("Transaction successfully committed!");
  } catch (e) {
    console.log("Transaction failed: ", e);
  }
}

是否可以像文档暗示的那样在进行并发编辑时调用两次 outerFunc

Firestore SDK 无法调用您的 outerFunc(更不用说多次),但 Firestore SDK 确实可以多次调用您的 innerFunc 回调。

如果您觉得文档令人困惑,请在页面本身上提交反馈。右下角应该有一个link。