我有一个firebase函数,可以在项目更新时为其添加时间戳。我已经看到其他示例,其中代码卡在无限循环中,因为最新更新的时间戳导致它再次运行,但我认为我在下面的代码中找到了那部分。我相信这一点工作得很好,现在似乎陷入了更新循环。我错过了什么吗?
exports.itemUpdate = functions.database.ref('/items/{id}').onUpdate((event) => {
//dont mark updated timestamp if item is deleted
if (!event.data.exists()) {
return null;
}
//dont update if we are simply updating timestamp
if (event.data.child('lastUpdated').changed()) {
return null;
}else{
return admin.database().ref('/items/' + event.params.id + '/lastUpdated').set(admin.database.ServerValue.TIMESTAMP);
}
});
请注意,这适用于v1.0 beta版本的firebase功能。
答案 0 :(得分:2)
我认为您的代码没有进入if
区块,因为dataSnapshot中没有方法changed
。
您可以尝试使用以下内容检查lastUpdated
是否已更改:
const oldValue = event.data.previous.val();
const newValue = event.data.val();
if(oldValue.lastUpdated !== newValue.lastUpdated) {
return null;
} else {
return admin.database().ref('/items/' + event.params.id + '/lastUpdated').set(admin.database.ServerValue.TIMESTAMP);
}