2016-10-09 133 views
0

我想從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")); 
      }); 

    }); 

回答

3

您正在用它一個讚美詩一個新的陣列和存儲新的陣列循環的每次迭代。

因爲它存儲在同一個存儲密鑰將覆蓋任何東西存放在那裏

這意味着你只和了保存,只有最後的讚歌。

創建外循環數組...推新的項目,在循環內部數組...循環完成此之後,存儲整個陣列一旦

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