как использовать метод forEach () при запросе базы данных Firebase в реальном времени - PullRequest
0 голосов
/ 06 июля 2018

Моя проблема связана с запросом глубоко-слоистой базы данных реального времени в облачных функциях 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

Теперь в своей облачной функции я написал фрагмент кода, чтобы получить период каждого продукта для клиента (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 голосов
/ 06 июля 2018

Ваш 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...