Promise.all不等待使用Firebase数据库解决承诺的问题

时间:2018-10-06 07:44:57

标签: firebase promise es6-promise

这个问题不是重复的,因为我已经花了太多时间来搜索和应用已经在stackoverflow上的解决方案。我正在使用Firebase数据库。在其中,我有两个节点,一个具有用户信息,第二个具有有关用户帖子的所有评论。我正在获取评论,然后针对每个评论再次向Firebase发出请求,以获取对评论发表评论的用户信息。我正在对从Firebase中获取用户信息的请求使用诺言,对于每个请求,我都返回一个新的诺言并将其推送到数组。这是我在其中将诺言推送到数组中的代码:

function getFirebaseComments() {
    $(".all_firebase_keys").each(function () {
        if (!allFirebaseKeys.includes($(this).val())) {
            allFirebaseKeys.push($(this).val());
            commentsRef.child($(this).val()).orderByKey().limitToLast(4).on("child_added", function (snap) {
                lists.push(getUser(snap.val().from_key, snap.val().comment, snap.ref.parent.key, snap.key));
            });
        }
    });
    Promise.all(lists).then(function (ful) {
        console.log(ful);
    });
}

这是我兑现承诺的代码:

function getUser(id, comment, parentKey, commentKey) {
    return new Promise(function (resolve, reject) {
        users = usersRef.child(id);
        users.once("value", function (snapshot) {
            $("#" + parentKey).append('<p id="' + commentKey + '">' + snapshot.val().first_name + " " + comment + '</p>');
            resolve({
                'parentKey': parentKey,
                'commentKey': commentKey,
                'first_name': snapshot.val().first_name,
                'comment': comment
            });
        });
    });
}

问题: 问题是Promise.all没有等待所有的诺言在页面加载后立即解决并执行。页面完全加载后,然后我在控制台中执行以下代码,那么它将完美显示我需要的结果:

Promise.all(lists).then(function (ful) {
    console.log(ful);
});

请帮助我如何解决此问题。

0 个答案:

没有答案