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

如何在Javascript中从Firebase检索数据?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我有一个节点名为群聊,另一个节点名为用户。节点group\u chat包含包含消息、时间和发件人id的子节点。而节点users包含用户的详细信息。当我从群组聊天节点检索聊天时,我还想显示每个发件人的信息。关于使用此代码 rootChat.on("child_added", function (snapshot) { if(snapshot.val().sender_id == logged_in_user_id) { // Message by You

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

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状态时,它是另一个用户的消息,它通过特定节点检索用户的信息。但在做这件事的同时,它会自动地进入下一个孩子,同时通过第一个孩子的用户细节,这会自动破坏显示中间消息、中间消息和结尾消息的排列。 如果我在nodegroup\u chat中有4个名为-child1、-child2、-child3和-child4的子节点,在检查-child1时,它也会检查-child2,有时会在-child1之前打印-child2。 我如何解决它?有没有什么方法可以让我等待else条件完成,然后转到下一个孩子?或者有没有什么方法可以让我在一行代码中获得用户的详细信息

// rootUser.child.name 

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

其概要如下:

  • 在(“值”上使用
    ,而不是在(“添加的子项”
    )上使用
    ,这样您可以一次获得所有消息
  • 在消息上循环以确定唯一的用户ID
  • 为所有用户加载
    一次(“值”)
    调用。请注意
    一次()
    返回承诺,因此您可以等待所有用户加载
    承诺.all()
  • 现在再次循环所有消息以构建HTML
  • 此时,如果您需要用户数据,您可以在不需要异步调用的情况下查找它

  • 是的,这对我来说很有效。我一直在考虑,但我想这可能会减慢进程