Firebase - сохранить запрос к объекту / карте / массиву в JS - PullRequest
1 голос
/ 25 апреля 2020

У меня есть база данных Firebase в реальном времени. Я хотел бы написать запрос и сохранить данные в массив и работать с ними позже. Могу ли я сделать это как-нибудь? Этот код работает хорошо, просто нужно как-то сохранить его на потом. Объект / карта были бы хороши, но массив работает тоже. Мой полукод здесь:

map = new Map();
var rootRef = firebase.database().ref("locations/map");
rootRef.once("value", function(snapshot) {
  snapshot.forEach(function(child) {
    console.log(child.key+": "+child.val().value);
    map.set(child.key, child.val().value);
  });
});
console.log(map);

Работает нормально, но если я попробую

console.log(map.get(0));

Это не определено. Это необходимо для:

 for (i = 0; i < someaarray.data.length; i++) {
  if (someaarray.data[i].id == map.get(id))
  {
    someaarray.data[i].value = map.get(value);
  }
}

1 Ответ

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

Вам необходимо вернуть обещание, поскольку данные выборки асинхронны , поэтому попробуйте следующее:

function getData() {
return new Promise((resolve, reject) => {
let map = new Map();
var rootRef = firebase.database().ref("locations/map");
rootRef.on("value", function(snapshot) {
  snapshot.forEach(function(child) {
    console.log(child.key+": "+child.val().value);
    map.set(child.key, child.val().value);
    resolve(map);
   });
  });
 });
}

Затем, когда вам нужно использовать map, вам нужно выполните следующие действия:

getData().then((value) => {
  console.log(value.get(0));
 });
});

Проверьте здесь для получения дополнительной информации:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...