Ссылка на базу данных firebase с конкатенацией переменных и строк - PullRequest
0 голосов
/ 19 мая 2018

Как вы можете видеть ниже, я пытаюсь прочитать список данных из базы данных, а затем перебрать результат в javascript.Функция запускается всякий раз, когда я открываю / обновляю страницу:

firebase.database().ref("Users/" + uid + "/rooms").on("value", function(snapshot) {

    snapshot.forEach(function(e) {

         var element = e.val();

         var roomId = element.Id;

    });
});

Однако эта конкатенация строк для указания идентификатора пользователя по какой-то причине не работает.Когда я заменяю его идентификатором пользователя напрямую, как это:

firebase.database().ref("Users/GR3JFsMrKOjCrLhDNFMaq72COd07/rooms").on.....

, который работает отлично.Но, конечно, я хочу использовать переменную, которая содержит Id текущего пользователя.

Переменной uid присваивается значение в onAuthStateChanged при проверке, вошел ли пользователь в систему:

firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.

uid = user.uid;

Если я добавлю console.log следующим образом:

firebase.database().ref("Users/" + uid + "/rooms").on("value", function(snapshot) {

console.log(snapshot.parent);

    snapshot.forEach(function(e) {

, вывод с первым примером кода (с использованием переменной uid) будет: undefined.Если я укажу идентификатор пользователя напрямую, это будет: room-id-1 (результат, который я хочу).

Как заставить работать конкатенацию строк?Или это неправильный способ указания пути текущего пользователя?

1 Ответ

0 голосов
/ 19 мая 2018

Крайне маловероятно, что проблема заключается в самой конкатенации строк. намного более вероятно, что uid simple еще не имеет значения, когда вы начинаете чтение из базы данных.

Чтобы убедиться, что uid доступно, поместите чтениеданных в слушатель состояния авторизации, подобный этому:

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    uid = user.uid;
    console.log("uid="+uid);
    firebase.database().ref("Users/" + uid + "/rooms").on("value", function(snapshot) {
      snapshot.forEach(function(e) {
        var element = e.val();
        var roomId = element.Id;
        console.log("roodId="+roomId);
      });
    });
  }
})
...