【问题标题】:Firebase - Cloud Functions: enumerate [Object Object]Firebase - 云函数:枚举 [Object Object]
【发布时间】:2017-08-02 22:50:24
【问题描述】:

我想从下面的结构中枚举成员对象。 我之前没有 node.js 的经验,我试过下面的代码,它似乎不起作用。

exports.sendVaultUnlockedPush = functions.database.ref('/Vaults/{id}/action').onUpdate(event => {
    let status = event.data.val();
    if (status == 'lock') {
        var db = admin.database();
        var vaultRef = db.ref("/Vaults/" + event.params.id);
        vaultRef.once('value').then(function(snapshot) {
            var hasMembers = snapshot.child('members');
            if (hasMembers) {
                var memberRef = db.ref("Vaults/" + event.params.id + "/members");
                memberRef.once('value').then(function(memberSnapshot) {
                    memberSnapshot.forEach(function(element) {
                        console(element.key + " - " + element.val());
                    }, this);
                });
            }
        });
    }
})

它会抛出以下错误:

Error: Firebase.DataSnapshot.forEach failed: Was called with 2 arguments. Expects no more than 1. at Error (native) at z (/user_code/node_modules/firebase-admin/lib/database/database.js:42:1666) at T.forEach (/user_code/node_modules/firebase-admin/lib/database/database.js:114:179) at /user_code/index.js:34:36 at process._tickDomainCallback (internal/process/next_tick.js:135:7)

我只希望它返回“成员”节点的值。而且我不知道做同样的事情。 非常感谢您对此进行排序的任何帮助。谢谢!

【问题讨论】:

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


    【解决方案1】:

    根据docs forEach 只需要一个参数:

    这应该可行:

    var values;
    memberSnapshot.forEach(function(element) {
        console(element.key);
        values = element.val();
        for (var val in values) {
            if (values.hasOwnProperty(val)) {
                console(val, values[val]);
            }
        }
    });
    

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

    【讨论】:

    • 这意味着它只能迭代{x, y, z} 而不能迭代{{x: y}, {x, y}} 你能告诉我,我应该用什么来迭代两个参数?
    • @Nina 我不明白。 forEach 将遍历每个键。您可以使用 for 循环遍历每个 element.val()。
    • 我不知道该怎么做。我是否只需将function(element) 更新为function(element.val())?对不起!!!我来自 iOS 背景,几天前我刚开始使用 node.js 从 Firebase 云发送推送通知。
    猜你喜欢
    • 2018-07-28
    • 2017-08-13
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多