【问题标题】:Referencing firebase database with a variable and string concatenation使用变量和字符串连接引用 firebase 数据库
【发布时间】:2018-10-29 16:12:37
【问题描述】:

正如您在下面看到的,我正在尝试从数据库中读取数据列表,然后在 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 变量)的输出是:未定义。 如果我直接指定用户 ID,它是:room-id-1(我想要的结果)。

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

【问题讨论】:

  • 请更新问题以澄清您的代码何时执行以及如何初始化 uid 变量...此外,请考虑在合适的时候使用“let”来声明变量,因为范围界定/提升可能会变得非常混乱异步;)

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


【解决方案1】:

问题极不可能出在字符串连接本身。当您开始从数据库中读取数据时,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);
      });
    });
  }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2020-06-07
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多