我正在尝试在Flask应用中使用js从Firebase检索数据。尽管它可以工作,但执行次数却不止一次。这是我的代码。我只是想获取消息ID,将它们保存在数组中,然后在打开聊天框时添加它们。我只希望它执行一次。我该怎么办?
这是我的代码:
//Getting the messages id of the logged in user from firebase and pushing them into the array
firebase.database().ref().child("user-messages").child("{{usuario}}").once('value', function(snapshot) {
console.log(snapshot.val());
snapshot.forEach(function(child) {
console.log("Child: " + child.key + "//////" + child.val());
var msg = {};
msg.key = child.key;
msg.val = child.val();
mensajes.push(msg);
});
});
//Looping the array and looking for the messages on firebase
for(i = 0; i < mensajes.length; i++){
console.log(mensajes);
firebase.database().ref().child("Mensajes").child(mensajes[i].key).once('value', function(childsnapshot) {
var id;
if(mensajes[i].val == "1"){
id = usuario[0].nombre.split(" ")[0];
user = buscarUsuario(childsnapshot.val().to);
} else if(mensajes[i].val == "2"){
user = buscarUsuario(childsnapshot.val().from);
id = user.nombre.split(" ")[0];
}
if (user.user == usuarios[index].user){
if(chat.length){
chat.chatbox("option", "boxManager").addMsg(id, childsnapshot.val().message);
} else{
div.chatbox("option", "boxManager").addMsg(id, childsnapshot.val().message);
}
}
});
}
因此,它的第一个迭代有效,执行了5次,只得到5条消息:
但是然后,我明白了(不断地,永不停止,页面崩溃):
我在做什么错了?
预先感谢:)
答案 0 :(得分:0)
您正在once()
循环内调用for
。因此,当然,您可以期望它在循环中每次调用时都会执行,即mensajes
的长度。