【问题标题】:onWrite trigger for updating RTD branch update time goes into recursion用于更新 RTD 分支更新时间的 onWrite 触发器进入递归
【发布时间】:2020-07-05 22:39:56
【问题描述】:
我想在数据发生变化时更新分支的时间戳,我想出了这段代码
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === 'gameStateUpdateTime') {
exports.gameStateUpdateTime = functions.database.ref('/gameStates/{id}')
.onWrite((change, _context) => {
return change.after.ref.child('updatedAt').set(new Date().getTime());
});
}
然而,这会导致一个糟糕的递归。任何想法如何防止递归?
【问题讨论】:
标签:
node.js
firebase
firebase-realtime-database
google-cloud-functions
【解决方案1】:
结果是这样的:
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === 'gameStateUpdateTime') {
exports.gameStateUpdateTime = functions.database.ref('/gameStates/{id}')
.onWrite((change, _context) => {
if (change.before.exists() && change.after.exists()) {
const original = change.before.val();
const updated = change.after.val();
if (original.updatedAt != updated.updatedAt) {
return null;
}
}
return change.after.ref.child('updatedAt').set(new Date().getTime());
});
}
另一种解决方案是将日期保存在不同的分支上。