Firebase 触发器中的云函数不是事务更新的一部分

Cloud functions in Firebase trigger are not part of the transaction update

我正在使用实时数据库,并且正在使用事务来确保我的数据集的完整性。在下面的示例中,我在每次更新时更新 currentTime

export const updateTime = functions.database.ref("/users/{userId}/projects/{projectId}")
    .onUpdate((snapshot) => {
      const beforeData = snapshot.before.val();
      const afterData = snapshot.after.val();
      if (beforeData.currentTime !== afterData.currentTime) {
        return Promise.resolve();
      } else {
        return snapshot.after.ref.update( {currentTime: new Date().getTime()})
            .catch((err) =>{
              console.error(err);
            });
      }
    });

云函数似乎不是事务的一部分,但会在我的客户端中触发多次更新,我尽量避免这种情况。

例如,我看到这个 starter tutorial 用比萨表情符号替换了 :pizza:。在我的客户端中,我会在一帧中看到 :pizza:,然后再用表情符号替换它。我知道,披萨教程只是一个例子,但我 运行 遇到了类似的问题。非常感谢任何建议!

Cloud Functions 确实 运行 不作为数据库事务的一部分。他们 运行 在数据库更新后,收到受影响数据的“之前”和“之后”快照。

如果您希望 Cloud Functions 充当审批流程,惯用的方法是让客户端写入该函数侦听的不同位置(通常称为待处理队列)。然后该函数执行它想要的任何操作,并将结果写入最终位置。