如何在查询Firebase实时数据库中使用forEach()方法

时间:2018-07-06 08:29:19

标签: javascript node.js firebase google-cloud-functions

我的问题是关于查询Firebase云功能中的深层实时数据库。

我的数据库结构如下:

{  
     "sellers":  
        {  
           "s0": {  
                 "customers":    
                           {  
                           "c0":  
                               {
                                "name":"ABC",  
                                "email":"abc@gmail.com",  
                                "phone":"8899889988",  
                                "products":  
                                         {  
                                           "123":
                                                {  
                                               "productname":"WHIRLPOOL MACHINE",  
                                                "dop":"2018-07-03",  
                                                "period":"2"  
                                                 },  
                                           "456":  
                                                 { 
                                                 "productname":"ONIDA OVEN",  
                                                 "dop":"2018-07-04",    
                                                 "period":"1"    
                                                 }  
                                         }  
                                      },  .....and so on

现在,在我的云函数中,我编写了一段代码来获取customer(c0)每种产品的期限,就像这样:

exports.testQuery =  functions.https.onRequest((req,res) => {
  const dates = [];
  ref.child("sellers/s0/customers/c0").once("value").then(snap => {
    const childSnap = snap.val().products;
    childSnap.forEach(grandSnap => {
       const days = grandSnap.val().period;
       dates.push(days);
    });
    return dates;
  }).then(response => res.send(response))
  .catch(error => res.send(error));
});  

当我部署该功能时,我的期望值应该是:

  

[“ 2”,“ 1”]

它似乎不起作用,但是我认为我的逻辑是正确的。 我在网页上得到的输出是:

  

{}

请帮助!

  

此外, forEach() 方法是否不能为此操作嵌套在多个客户上并因此在多个卖家上使用

1 个答案:

答案 0 :(得分:0)

您的products不是数组,因此没有forEach。您还应该只加载products,因为所有使用的都是:

const dates = [];
ref.child("sellers/s0/customers/c0/products").once("value").then(snap => {
  snap.forEach(productSnap => {
     const days = productSnap.val().period;
     dates.push(days);
  });
  return dates;
}).then(response => res.send(response))