这个问题不是重复的,因为我已经花了太多时间来搜索和应用已经在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);
});
请帮助我如何解决此问题。