【问题标题】:Count grandchild nodes in a cloud function计算云函数中的孙节点
【发布时间】:2017-09-18 14:27:31
【问题描述】:

我有以下数据结构:

/users
    /{user_uid}
        /lists
            /{list_uid}

使用云功能,我希望能够在我的数据库的根目录上有一个/list_count 引用,以便能够轻松跟踪列表计数,而无需进行繁重的客户端调用来计算它们.

目前我有这个实现,我觉得有点难看:

exports.countlists = functions.database.ref('/users/{uuid}/lists').onWrite(event => {
    const ref = event.data.ref.parent.parent.parent.child('list_count');

    return ref.transaction(current => {
        if (event.data.exists() && !event.data.previous.exists()) {
            return (current || 0) + 1;
        }
        else if (!event.data.exists() && event.data.previous.exists()) {
            return (current || 0) - 1;
        }
    });
});

问题是我在 firebase 控制台中遇到错误:

序列化返回值时出错:TypeError: Converting circular structure to JSON

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions firebase-admin


    【解决方案1】:

    正如内联所说here

    您遇到的问题是 ref.transaction 返回的承诺值不能序列化为 JSON。解决这个问题的最简单方法(在我们在 Firebase SDK 中修复它之前)是将值转换为 null 之类的值。

    我想解决你的问题,这样做:

    exports.countlists = functions.database.ref('/users/{uuid}/lists').onWrite(event => {
    let root = admin.database().ref(`users/${event.params.uuid}/lists/list_count`)
    
        return root.transaction(function(current){
            if (event.data.exists() && !event.data.previous.exists()) {
                return (current || 0) + 1;
            }
            else{
                return (current || 0) - 1;
            }
        }.then(() => null));
    });
    

    【讨论】:

    • 我在链的末尾添加了一个console.log,因为console.log返回null,它可以工作。但是数据没有在引用处修改,所以问题没有解决:/
    • @Supamiu 现在请复制粘贴我的代码,也许你的 ref 变量不好。
    • 我要写的 ref 是 /list_count,从 root 开始。但我明白你的意思,使用 admin.database() 更改为直接引用。让我改变它,如果它解决了问题我会接受,否则我会编辑这个评论:)
    • 我在事务过程中添加了一个console.log(current),即使我在数据库中手动将/list_count 设置为0,我仍然得到null 作为current 值。 (无法编辑,太慢了)
    • @Supamiu 很抱歉,我认为您的功能正在运行,但是在查看我自己的代码时,我认为您缺少一些东西。现在这个更新的代码应该可以工作了:D
    猜你喜欢
    • 2011-08-19
    • 2012-11-12
    • 2021-05-22
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多