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 充当审批流程,惯用的方法是让客户端写入该函数侦听的不同位置(通常称为待处理队列)。然后该函数执行它想要的任何操作,并将结果写入最终位置。
我正在使用实时数据库,并且正在使用事务来确保我的数据集的完整性。在下面的示例中,我在每次更新时更新 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 充当审批流程,惯用的方法是让客户端写入该函数侦听的不同位置(通常称为待处理队列)。然后该函数执行它想要的任何操作,并将结果写入最终位置。