gpt4 book ai didi

javascript - Firebase 中的嵌套查询,如何使用 JavaScript 显示恢复的数据?

转载 作者:行者123 更新时间:2023-12-03 05:15:12 25 4
gpt4 key购买 nike

我的数据库中有这个结构 tree 包含我的网络消息信息的两个节点,在节点“消息”中,我存储了所有消息的信息,在节点“用户消息”中,我创建了对这些消息的引用,例如,当用户发送一条消息,该消息的 key 存储在该节点(User-messages)中,从而创建该用户发送的所有消息的 key 列表,该列表将用于定位哪些消息属于该用户所有已发送消息列表中的特定用户

tree example

   var  RefMessage=new Firebase('https://chatfbexample.firebaseio.com/user-messages/332');
var oMessages=[];
var All= new Firebase('https://chatfbexample.firebaseio.com/all-messages');
RefMessage.on("value",function(snapshot){

snapshot.forEach(function(snap){
var key=snap.key();
var mensajeR=All.child(key);
mensajeR.on('value',function(snap){
var id=snap.val().id;
oMessages[id]=[];
oMessages[id]['id']=id;
});

});

for(i in oMessages)
{
console.log(oMessages[i]['id']);
}
});

我将数据存储在数组中,因为我只想获取已存储的最后一个值(消息),但是,当我尝试使用循环显示数据时,它不会向我返回任何内容,如果我检查数组,我看到值已被存储,事实上,在不使用“for”的情况下执行控制台日志显示了数组,我的问题是,如何在检索后显示这些数据?

最佳答案

这是因为 firebase 调用是异步运行的,当你的 for 循环执行时,它还没有完成调用。查看 Promise,然后在 .on 完成时进行链接。

如果您将代码更改为:

var RefMessage = new Firebase('https://chatfbexample.firebaseio.com/user-messages/332');
var oMessages = [];
var All = new Firebase('https://chatfbexample.firebaseio.com/all-messages');
RefMessage.on("value", function (snapshot) {

snapshot.forEach(function (snap) {
var key = snap.key();
var mensajeR = All.child(key);
mensajeR.on('value', function (snap) {
console.log('done call');
var id = snap.val().id;
oMessages[id] = [];
oMessages[id]['id'] = id;
});

});
console.log('trying loop');

for (i in oMessages) {
console.log(oMessages[i]['id']);
}
});

您将在“完成调用”控制台日志之前看到“尝试循环”控制台日志。

关于javascript - Firebase 中的嵌套查询,如何使用 JavaScript 显示恢复的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com