繁体   English   中英

如何从 Javascript 中的 Firebase 中检索数据?

[英]How to retrieve data from Firebase in Javascript?

我有一个名为group_chat的节点和另一个名为users的节点。 节点group_chat包含包含消息、时间和 sender_id 的子节点。 而节点用户包含用户的详细信息。 当我从group_chat节点检索聊天时,我还想显示每个发件人的信息。 关于使用此代码

rootChat.on("child_added", function (snapshot) {
    if(snapshot.val().sender_id == logged_in_user_id) {
        // Message by You
        // Print snapshot.val().message
    }
    else{
        const refUser = "/users/"+snapshot.val().sender_id;
        const rootUser = database.ref(refUser);
        rootUser.once("value", function(snap) {
            // Print snap.val().name
            // Display snap.val().picture

            // Print snapshot.val().message
        });
    }
    
});

问题是,当代码进入其他用户消息的 else 条件时,它会通过特定节点检索用户的信息。 但是在执行此操作时,它会在遍历第一个孩子的用户详细信息时自动转到下一个孩子,这会自动破坏消息的排列,在中间显示最新消息,中间一个在最后等等。 如果我在节点group_chat中有 4 个名为 -child1、-child2、-child3 和 -child4 的孩子,在检查 -child1 时,它还会检查 -child2,有时它会在 -child1 之前打印 -child 2。 我该如何解决? 有什么方法可以等待其他条件完成,然后将 go 等待下一个孩子? 或者有什么方法可以让我在一行代码中以某种方式获取用户详细信息

// rootUser.child.name 

在开始构建 HTML 之前,如何预加载用户?

其大纲将类似于:

  1. 使用on("value"代替on("child_added ,以便您在一个 go 中获取所有消息。
  2. 循环消息以确定唯一的用户 ID。
  3. 使用once("value")调用加载所有用户。 请注意, once()返回 promise,因此您可以等待所有用户加载Promise.all()
  4. 现在再次循环所有消息以构建 HTML。
  5. 此时如果需要用户数据,就可以查找,不需要异步调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM