我正在尝试从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"));
});
});
答案 0 :(得分: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;
});