2016-10-09 8 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

あなたはそれで1つの賛美歌を持つ新しい配列を作り、その新しい配列にループのすべての反復を格納しています。

あなたが唯一、最大保存され、最後の賛美歌を持つだろうことを意味しない何かそこに格納されている

が上書きされます、同じストレージ・キーに格納されているので。

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;  
}); 
たら、全体の配列を格納し、ループが完了した後、後に...ループ内でその配列に新しいアイテムをプッシュする...ループの外の配列を作成します。
関連する問題