0

我想从下面的结构中枚举成员对象。 我没有在node.js的经验,我已经尝试了下面的代码,它似乎并没有工作。Firebase - Cloud函数:枚举[Object对象]

Structure

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)

我只是喜欢它返回的 '成员' 节点的值。我不知道这样做。 任何帮助非常感谢获得这种排序。谢谢!

回答

1

按照docs的forEach只需要一个参数:

enter image description here

这应该工作:

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

+0

这意味着它只能迭代'{X, y,z}'但不是'{{x:y},{x,y}}' Can你让我知道,我应该用什么来迭代两个参数? – Nina

+0

@妮娜我不明白。 ** forEach **将遍历每个键。你可以用for循环遍历每个element.val()。 –

+0

我不知道该怎么做。我只是将'function(element)'更新为'function(element.val())'? 对不起!我来自iOS背景,几天前我刚刚开始使用node.js发送来自Firebase云的推送通知。 – Nina