我是不熟悉Firebase的人。我正在使用Firebase数据库。在其中,我有两个节点,一个具有用户信息,第二个具有有关用户帖子的所有评论。这些是数据库结构
用户节点
我想做的是获取帖子的所有评论,然后使用from_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调用是异步的,因此未按正确的顺序进行调用。我想使其同步,就像先获取注释,然后为每个注释获取用户详细信息,然后继续下一个注释。请帮助我如何实现它,我已经在解决方案上花费了很多时间,并最终将其发布在这里。这不是其他问题的重复。
当前输出
我想要的输出
答案 0 :(得分:1)
最后,我在link的帮助下自行找到了解决方案。我正在共享帮助链接,我的代码也许会对其他人有所帮助。
$(".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>');
})
});
});
答案 1 :(得分:0)
您需要使用Promises之类的东西。
也许是这样的:
$(".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方法。