【问题标题】:Firebase functions - Counting children and updating an entryFirebase 函数 - 计算子项并更新条目
【发布时间】:2018-07-02 19:32:50
【问题描述】:

我一直在尝试使用Firebase Functions写一个简单的方法,但是我对JS不熟悉。

下面是我的实时数据库的结构

-斑点

---is_hidden: false

---喜欢

-----like_id_1: 真

---不喜欢

-----dislike_id_1: 是的

我正在尝试编写一个简单的方法来执行以下操作:每当将条目添加到不喜欢时,计算喜欢和不喜欢的次数。

如果不喜欢的数量大于(喜欢+5)的数量, 将is_hidden的值改为true

这是我解决问题的尝试

exports.checkHiddenStatus = functions.database.ref('/spots/{spotid}').onWrite(
    (change, context) => {
      const collectionRef = change.after.ref;
      const isHiddenRef = collectionRef.child('is_hidden');
      const likesRef = collectionRef.child('likes');
      const dislikesRef = collectionRef.child('dislikes');


      if(isHiddenRef.before.val()) return;

      let likeCount = likesRef.numChildren();
      let dislikeCount = dislikesRef.numChildren();

      let isHidden = false;

      if( dislikeCount >= (likeCount + 5))
          isHidden = true;

      if(!isHidden) return;

      // Return the promise from countRef.transaction() so our function
      // waits for this async event to complete before it exits.
      return isHiddenRef.transaction((current) => {
        return isHidden;
      }).then(() => {
        return console.log('Counter updated.');
      });
    });

很遗憾,因为我没有使用 JS 的经验,所以我总是遇到我不理解的错误消息。最近的存在

TypeError:无法读取未定义的属性“val” 在exports.checkHiddenStatus.functions.database.ref.onWrite (/user_code/index.js:28:28)

有人可以帮我写这个函数吗?谢谢!

【问题讨论】:

  • 仅供参考,错误消息是说问题出在 index.js 的第 28 行。

标签: javascript firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

您似乎正试图将数据库Reference 对象视为更改对象。更改具有 beforeafter 属性,但引用没有。

如果您有一个数据库引用对象,并且想要该位置的数据库值,则需要使用其once() 方法查询它。

阅读有关使用 Admin SDK 的 readingwriting 数据的更多信息。

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多