Javascript Firebase数据库同步调用问题

Javascript Firebase数据库同步调用问题,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我是消防基地的新手。我正在使用firebase数据库。其中我有两个节点,一个包含用户信息,另一个包含用户对帖子的所有评论。这些是数据库结构 用户节点 评论节点 我想做的是获取一篇文章的所有评论,然后从_key获取,这实际上是从该评论节点对文章发表评论的用户密钥,然后从firebase获取特定的用户信息。我已经编写了以下代码 $(".all_firebase_keys").each(function () { database.ref('comments

我是消防基地的新手。我正在使用firebase数据库。其中我有两个节点,一个包含用户信息,另一个包含用户对帖子的所有评论。这些是数据库结构

用户节点

评论节点

我想做的是获取一篇文章的所有评论,然后从_key获取
,这实际上是从该评论节点对文章发表评论的用户密钥,然后从firebase获取特定的用户信息。我已经编写了以下代码

$(".all_firebase_keys").each(function () {
                    database.ref('comments/' + $(this).val()).on('child_added', function (snapshot) {
                        values = snapshot.val();
                        console.log(values.comment);
                        snapshot.forEach(function (path) {
                            if (path.key == "from_key") {
                                database.ref('users/' + values.from_key).once("value", function (user) {
                                    console.log(values.comment + "  " + user.val());
                                });
                            }
                        })
                    });
                });
我面临的问题是,由于firebase调用是异步的,因此它没有按照正确的顺序进行调用。我想让它像第一次获取评论一样同步,然后为每个评论获取用户详细信息,然后继续下一个评论。请帮助我如何实现它我已经花了这么多时间在它上面寻找解决方案,最后张贴在这里。这不是其他问题的重复

电流输出

  • 评论1
  • 评论2
  • 用户a
  • 用户b
  • 我想要的输出

  • 评论1用户a
  • 评论2用户b

  • 你需要用承诺之类的东西

    也许是这样的:

        $(".all_firebase_keys").each(function () {
                    database.ref('comments/' + $(this).val()).on('child_added', async function (snapshot) {
                        values = snapshot.val();
                        console.log(values.comment);
    
                        for (value of values) {
                            data = await database.ref('users/' + value.from_key).once("value");
    
                             console.log(data);
                        }
                    });
                });
    

    这只是一个例子。用于方法而不是forEach

    在这个帮助下,我终于自己找到了解决方案。我正在分享帮助链接,我的代码可能对其他人有帮助

    $(".all_firebase_keys").each(function () {
                id = "#"+$(this).val();
                commentsRef.child($(this).val()).orderByChild('timestamp').on("child_added", function (snap) {
                   users = usersRef.child(snap.val().from_key);
                   users.once("value", function (snapshot) {
    
                       $("#"+snap.ref.parent.key).append('<p>'+snapshot.val().first_name +" "+ snap.val().comment+'</p>');
                   })
                });
            });
    
    $(“.all\u firebase\u key”)。每个(函数(){
    id=“#”+$(this.val();
    commentsRef.child($(this.val()).orderByChild('timestamp').on(“添加了child_”,函数(snap){
    users=usersRef.child(snap.val().from_key);
    用户。一次(“值”,函数(快照){
    $(“#”+snap.ref.parent.key).append(“”+snapshot.val().first_name+”+snap.val().comment+”

    ); }) }); });
    @Emestyno Its仍然存在同样的问题。