gpt4 book ai didi

javascript - 使用 Node js 进行 2 个异步查询

转载 作者:行者123 更新时间:2023-11-30 00:46:50 25 4
gpt4 key购买 nike

所以我想显示一个包含数据库中所有“房间”的表,我还想显示房间的创建者,但只有用户的ID存储在房间表中,所以我必须做一个在用户表上查询。

我尝试过这样的事情:

socket.on('room', function() {
connection.query('SELECT * FROM room', function(err, rows) {
for(i=0;i<rows.length;i++) {
var room_name = rows[i].name;
var room_nbPlayer = rows[i].nbPlayer;
var room_language = rows[i].language;
build_user(rows[i].creator, function(res){
var username = res;
io.sockets.volatile.emit('broadcast_room', "<tr>" +
"<td>" + room_name + "</td>" +
"<td>" + room_nbPlayer + "</td>" +
"<td>" + room_language + "</td>" +
"<td>" + username + "</td>" +
"</tr>");
});
}
});
});
function build_user(id,callback){
connection.query('SELECT username FROM user WHERE id ="'+id+'"', function(err, user) {
var username = user[0].username;
callback(username);
});
}

所以,例如,如果我尝试

console.log(room_name);

在此函数之前

build_user(rows[i].creator, function(res){

我得到了所有的名称,但是一旦我输入函数,名称都是相同的,所以最后我的表是错误的。它只获得了用户的正确用户名,但房间查询中的所有变量显示始终相同(这是我数据库中的最后一个房间)

谢谢你!

最佳答案

发生这种情况是因为当 build_user 完成时,您的 for 循环已到达最后一项。所以你的 room_name、room_language 等是行中的最后一项。因此,您可以通过回调传递数据来修复它。

socket.on('room', function() {
connection.query('SELECT * FROM room', function(err, rows) {
for(i=0;i<rows.length;i++) {
build_user(rows[i], function(username, options){
var room_name = options.name;
var room_nbPlayer = options.nbPlayer;
var room_language = options.language;
io.sockets.volatile.emit('broadcast_room', "<tr>" +
"<td>" + room_name + "</td>" +
"<td>" + room_nbPlayer + "</td>" +
"<td>" + room_language + "</td>" +
"<td>" + username + "</td>" +
"</tr>");
});
}
});
});

function build_user(options,callback){
var id = options.creator;
connection.query('SELECT username FROM user WHERE id ="'+id+'"', function(err, user) {
var username = user[0].username
callback(username, options);
});
}

关于javascript - 使用 Node js 进行 2 个异步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21293069/

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