簡體   English   中英

如何在包含從 firebase 數據庫 JavaScript 檢索到的數據的數組上執行 forEach 循環

[英]How do you do a forEach loop on an array containing data retrieved from firebase database JavaScript

這是我的數據庫結構:

在此處輸入圖像描述

我正在嘗試編寫一個 firebase function 遍歷每個理發店,並檢索他們所有的理發師。

在下面的代碼中,我已成功檢索到所有理發店名稱,並將它們存儲在一個數組中,該數組在控制台上的記錄如下:

在此處輸入圖像描述

然而,當我嘗試進入我的 function 的下一階段時,“barberShopArray.forEach((key)”中的代碼都沒有執行,我不知道為什么。即使是“console.log(key)”也沒有工作。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

var database = admin.database();

exports.addTimeNod2 = functions.pubsub.schedule('every 24 hours').onRun((context) =>
    {

        var num = 1;
        let barberShopArray = [];
return database.ref('/BarberShops/').once("value").then((snapshot) =>
            {
                snapshot.forEach((childSnapshot) =>
                    {
                        barberShopArray.push(childSnapshot.key);
                    });
                console.log(barberShopArray);
                return barberShopArray;
            }).then(barberShopArray.forEach((key) =>
                {
                    console.log(key);
                    database.ref('/BarberShops/' + key + '/Barbers/Barber1/').once("value").then((snapshot)=>
                        {
                            if(snapshot.exists())
                            {
                                database.ref('metadata/shop' + num +'/').set(key);
                                num++;
                            }
                            return null;
                        }).catch((error)=>
                            {
                                console.log(error);
                                return error;
                            });
                    return null;
                }));
    });

就我而言,我做了

const db = firebase.database().ref();

    db.child("orders")
        .get()
        .then((snapshot) => {
            if (snapshot.exists()) {
                const fetchedOrders = [];

                for (let key in snapshot.val()) {
                    fetchedOrders.push({ ...snapshot.val()[key], id: key });
                }
          })

有關更多參考,請查看此鏈接

您已經提到console.log(barberShopArray)行運行良好。 console.log(barberShopArray)行之后和barberShopArray.forEach((key)行之前,您使用的是 return 語句return barberShopArray 。因此 function 在 return 語句之后的部分沒有被執行。請刪除 return解決問題的語句。也不需要return barberShopArray語句后的then()方法。因此請按以下方式修改代碼,它應該可以工作並成功更新metadata

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
var database = admin.database();
exports.addTimeNod2 = functions.pubsub.schedule('every 24 hours').onRun((context) => {
   var num = 1;
   let barberShopArray = [];
   return database.ref('/BarberShops/').once("value").then((snapshot) => {
       snapshot.forEach((childSnapshot) => {
           barberShopArray.push(childSnapshot.key);
       });
       console.log(barberShopArray);
       barberShopArray.forEach((key) => {
           console.log(key);
           database.ref('/BarberShops/' + key + '/Barbers/Barber1/').once("value").then((snapshot) => {
               if (snapshot.exists()) {
                   database.ref('metadata/shop' + num + '/').set(key);
                   num++;
               }
           }).catch((error) => {
               console.log(error);
               return error;
           });
       });
       return null;
   });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM