我正在尝试迭代 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/