使用变量和字符串连接引用firebase数据库

时间:2018-05-19 10:58:43

标签: javascript firebase firebase-realtime-database string-concatenation

如下所示,我正在尝试从数据库中读取数据列表,然后在javascript中循环结果。每当我打开/刷新页面时,该函数都会运行:

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

    snapshot.forEach(function(e) {

         var element = e.val();

         var roomId = element.Id;

    });
});

但是,指定用户ID的字符串连接由于某种原因不起作用。当我直接用这样的用户ID替换它时:

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

工作正常。但当然我想使用包含当前用户ID的变量。

在检查用户是否已登录时,在onAuthStateChanged中为uid变量分配了一个值:

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。 如果我直接指定用户ID,则为:room-id-1(我想要的结果)。

如何使字符串连接起作用?或者这是指定当前用户路径的错误方法吗?

1 个答案:

答案 0 :(得分:1)

问题出在字符串连接本身的可能性极小。当您开始从数据库中读取时,uid simple之前没有值的很多

要确保uid可用,请将数据的读取放入 auth状态侦听器中,如下所示:

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);
      });
    });
  }
})