循环访问Firebase数据库记录

问题描述:

我想从Firebase数据库中迭代项目的集合,然后将其存储在本地存储中,但似乎无法找出错误。我实际上已经阅读过文档,但仍然没有弄清楚为什么代码不起作用。循环访问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")); 
      }); 

    }); 

您正在用它一个赞美诗一个新的阵列和存储新的阵列循环的每次迭代。

因为它存储在同一个存储密钥将覆盖任何东西存放在那里

这意味着你只和了保存,只有最后的赞歌。

创建外循环数组...推新的项目,在循环内部数组...循环完成此之后,存储整个阵列一旦

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;  
});