#javascript #firebase #firebase-realtime-database
#javascript #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"));
});
});
Ответ №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;
});