代码之家  ›  专栏  ›  技术社区  ›  Stradosphere

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

  •  1
  • Stradosphere  · 技术社区  · 8 年前

    我有一个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之前的版本。firebase函数的0测试版。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Guilherme Lemmi MjJ    8 年前

    我相信你的代码没有进入 if 阻止,因为没有方法 changed dataSnapshot .

    你可以试试看 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);   
    }