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

Firebase函数为上次更改添加时间戳多次运行,firebase,google-cloud-functions,Firebase,Google Cloud Functions,我有一个firebase函数,可以在项目更新时为其添加时间戳。我见过其他例子,其中代码陷入无限循环,因为最新更新的时间戳导致它再次运行,但我认为我已经在下面的代码中找到了这一部分。我相信这在某一点上运行良好,现在它似乎陷入了更新循环。我错过什么了吗 exports.itemUpdate = functions.database.ref('/items/{id}').onUpdate((event) => { //dont mark updated timestamp if item

我有一个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);
    }
});

请注意,这是针对firebase功能的v1.0 beta版之前的版本。

我相信您的代码没有进入
if
块,因为在中没有方法
更改

您可以尝试检查
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);   
}

函数日志中是否有任何错误?我不明白您对
的调用已更改
,是否存在此方法?我在这里的文档中没有看到它:我在本文()中看到了对它的引用,并且没有错误。如果项目不存在,这似乎也会触发,因此我最终得到的是一个空项目,只有一个最新更新的戳记,没有其他内容…有趣的是,我会在早上更好地检查它!我在文档中也找不到changed()方法,但如果我也将其输出到控制台,它似乎可以工作。希望有人能参与进来并澄清这一部分。谢谢