База данных Firebase в реальном времени + JS объект - PullRequest
0 голосов
/ 25 апреля 2020

У меня действительно простой JS код:

var worldRef = firebase.database().ref('something/something1');
var something = new Object();
worldRef.on('child_added', function(snap)  {
    something.id = snap.key;
    something.value = snap.val().value;
});
console.log(something);

Он работает почти нормально - только один ключ и значение из базы данных, но это что-то. Если я изменю это:

console.log(something.id);

Не определено. Я пробовал с картой вместо объекта, но то же самое. Я вижу все на карте, но когда я пытаюсь вызвать getmap (ключ), он не определен.

Решение на основе массива:

var worldRef = firebase.database().ref('something/something1');
var something = [];
worldRef.on('child_added', function(snap)  {
  something.push ({
    id: snap.key,
    value: snap.val().value
  })
});
console.log(something);

Работает. enter image description here

1 Ответ

1 голос
/ 25 апреля 2020

Это связано с тем, что каждый раз, когда добавляется дочерний элемент , вы переопределяете свойства id и value вашего something объекта.

С тех пор, как child_added событие запускается один раз для каждого начального дочернего элемента в этом месте (см. do c), в конце ваш объект просто содержит последний дочерний элемент.

Если вы сделаете следующее (создав новое свойство для каждого дочернего элемента), вы увидите тот же эффект, что и с массивом:

var something = new Object();
worldRef.on('child_added', function (snap) {
   something[snap.key] = snap.val().value;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...