node.js - 关联数组显示空值
问题描述
大家好,我尝试使用 node js 和 socket.io 为后端开发聊天应用程序,我的问题是关联数组的空值
socket.on('nickName', (data) => {
console.log(data)
var roomId;
con.query("SELECT user_id FROM nickname WHERE user_id = '" + String(data) + "'", (err, result) => {
if (err) {
throw err;
}
console.log(result)
if (result == undefined || result[0] == undefined) {
con.query("INSERT INTO nickname (user_id,socket_id) VALUES ('" + data + "','" + socket.id + "')")
} else {
con.query("UPDATE nickname SET socket_id = '" + socket.id + "' WHERE user_id = '" + data + "' ", (err, result) => {
})
}
})
con.query("SELECT * FROM room WHERE user_id = '" + data + "'", (err, result) => {
if(err){
throw err;
}else{
io.to(socket.id).emit('getChatList', { "chatList": result })
var unread = {}
result.forEach(Element=>{
roomId = Element.room_name
con.query("SELECT COUNT(*) FROM message WHERE room_id = '"+roomId+"' AND seen=0 AND to_user='"+data+"'",(err,unseen)=>{
if(err){
throw err;
}else{
// I trying set value to unread array
unread[roomId] =unseen[0]['COUNT(*)'] ;
// unread array work correctly
console.log(unread)
}
})
// problem is here print unread empty ({})in
// console.
console.log(unread)
})
}
})
});
未读数组显示空值,但是当我将例如unread['A'] ='C' ;
从查询块中取出时一切正常,任何人都可以帮助我吗?
解决方案
我通过使用async.each()
而不是解决了我的问题result.forEach()
socket.on('nickName', (data) => {
console.log(data)
var roomId;
clients[data] = socket.id;
con.query("SELECT user_id FROM nickname WHERE user_id = '" + String(data) + "'", (err, result) => {
if (err) {
throw err;
}
console.log(result)
if (result == undefined || result[0] == undefined) {
con.query("INSERT INTO nickname (user_id,socket_id) VALUES ('" + data + "','" + socket.id + "')")
} else {
con.query("UPDATE nickname SET socket_id = '" + socket.id + "' WHERE user_id = '" + data + "' ", (err, result) => {
})
}
})
con.query("SELECT * FROM room WHERE user_id = '" + data + "'", (err, result) => {
if(err){
throw err;
}else{
io.to(socket.id).emit('getChatList', { "chatList": result })
var unread = {};
asyncc.each(result,function(Element,callbackk){
roomId = Element.room_name
console.log(Element)
con.query("SELECT COUNT(*) FROM message WHERE room_id = '"+Element.room_name+"' AND seen=0 AND to_user='"+data+"'",(err,unseen)=>{
if(err){
throw err;
}else{
console.log(unseen)
console.log(Element.room_name)
unread[Element.room_name] = unseen[0]['COUNT(*)'] ;
}
callbackk();
})
},function(er){
console.log(unread)
})
}
})
});
推荐阅读
- android - 我应该在paypal check android sdk的用户名和密码字段中输入什么?
- pyspark - 如何在 pyspark 中进行一种热编码
- c# - WCF Webservice 使用 Stream 传递 messagecontract 并将字符串返回给客户端
- blockchain - OS X 中外部 SSD 上的比特币核心
- python - 动态检索包目录的绝对路径
- firebase - 非谷歌服务器上的 Firebase 云功能
- typescript - 升级到 typescript 4.4.2 后如何修复“错误‘JSX’未定义 no-undef’
- user-interface - 为什么像 SwiftUI 或 Flutter/Dart 或 Compose/Kotlin 这样的 UI 系统使用声明式方法而不是命令式方法来定义 GUI?
- next.js - 如果所有代码看起来都正确,我该如何解决“Lighthouse 无法下载 robots.txt 文件”?
- streamlit - 尝试使用 streamlit run 在 streamlit 上运行文件时出现此错误,我该如何解决