Firebase函数为时间戳记上次更改运行多次

时间:2018-05-18 21:04:14

标签: firebase google-cloud-functions

我有一个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功能。

1 个答案:

答案 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);   
}