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