javascript - 循环访问 Firebase 数据库记录集合

标签 javascript firebase firebase-realtime-database

我正在尝试迭代 Firebase 数据库中的项目集合,然后将其存储在本地存储中,但我似乎无法弄清楚出了什么问题。我实际上已经阅读了文档,但仍然没有弄清楚为什么代码不起作用。

下面是我的代码:

dataRef.once("value", function(snapshot) {

          snapshot.forEach(function(childSnapshot) {

            var hymn_no             = childSnapshot.val().hymn_no;
            var hymn_category       = childSnapshot.val().hymn_category;
            var hymn_key            = childSnapshot.val().hymn_key ;
            var hymn_title          = childSnapshot.val().hymn_title;
            var hymn_verses         = childSnapshot.val().hymn_verse;
            var hymn_chorus         = childSnapshot.val().hymn_chorus;
            var hymn_author         = childSnapshot.val().hymn_author;

            console.log(hymn_no);
            console.log(hymn_category);
            console.log(hymn_key);
            console.log(hymn_title);
            console.log(hymn_verses);
            console.log(hymn_chorus);
            console.log(hymn_author);

            var hymns = [
                new Hymn({ 
                    "hymn_no": hymn_no, 
                    "hymn_category": hymn_category, 
                    "hymn_key": hymn_key, 
                    "hymn_title": hymn_title, 
                    "hymn_chorus": hymn_chorus,
                    "hymn_verses": hymn_verses, 
                    "hymn_author": hymn_author, 
                }),
            ];
            localStorage.setItem("Hymns", JSON.stringify(hymns));
            return JSON.parse(localStorage.getItem("Hymns"));
          });

    });

最佳答案

您正在创建一个包含一首赞美诗的新数组,并在循环的每次迭代中存储该新数组。

由于它存储在同一存储 key 中,因此它将覆盖存储在那里的其他任何内容

这意味着您只能存储最后一首赞美诗。

在循环外创建数组...将新项目推送到循环内的该数组...然后循环完成后,存储整个数组一次

dataRef.once("value", function(snapshot) {
          var hymns = [];
          snapshot.forEach(function(childSnapshot) {
               //....    
               var item = new Hymn(...);
               // push each new item to array
               hymns.push(item);  
          });
          // loop done, store data
          localStorage.setItem("Hymns", JSON.stringify(hymns));
          // return array
          return hymns;    
});

关于javascript - 循环访问 Firebase 数据库记录集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39945284/

相关文章:

firebase - Chrome 69 不支持 Firebase SDK

javascript - 如何上传照片但不同的文件夹?

swift - 当用户单击通知上的 "Allow"时,FCM token 不会保存在数据库中

firebase - Flutter firebase database.set(object) 问题

javascript - 清理 `child_added` 内的 Firebase 事件处理程序?

javascript - 应如何在 Firebase 的 Web 应用程序中显示和更新数据?

javascript - 按状态获取订单 Firebase

javascript - 轮询卡住、Pebble.js、ajax、node.js

javascript - Canvas 绘制带箭头的虚线

javascript - 使用 MongoDB 将多个数组聚合成一个大数组