Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我想在node.js中将mysql函数的变量用于外部_Javascript_Mysql_Node.js_Socket.io - Fatal编程技术网

Javascript 我想在node.js中将mysql函数的变量用于外部

Javascript 我想在node.js中将mysql函数的变量用于外部,javascript,mysql,node.js,socket.io,Javascript,Mysql,Node.js,Socket.io,我想在node.js中将mysql函数的变量用于外部。我在做两个问题。但我无法访问该变量。我使用了全局变量,但结果是一样的。如何访问该变量 我的代码似乎是: // Mysql query... mysql.query(messages_query, function(err, result) { // Add the results in socket... if(result.length > 0) { // messages array

我想在node.js中将mysql函数的变量用于外部。我在做两个问题。但我无法访问该变量。我使用了全局变量,但结果是一样的。如何访问该变量

我的代码似乎是:

// Mysql query...
mysql.query(messages_query, function(err, result) {

    // Add the results in socket...
    if(result.length > 0) {

        // messages array
        var messages = [];

        // Foreach 
        result.forEach(function(message){

            // User query...
            var user_query = 'SELECT id, username, avatar FROM users WHERE id = '+message["from"];

            // Second mysql query...
            mysql.query(user_query, function(err, result) {

                // Add result to global function
                if(result.length > 0) global.user += result;
                else console.log("User not found");

            }); 

            // Message array
            message["from"] = global.user;

            // Concat...
            var messages = messages.concat(message);

        });

        console.log("--- MESSSAGES ---");
        console.log(messages);
        // Users are undefined

    } else console.log("User not found");

});

抱歉,我的英语不好,所以我们这里有很多问题或误解。首先,这两条线相互冲突:

var messages = [];
var messages = messages.concat(message);
第二行至少应为:

messages.push(message);
将消息添加到数组中。然而,一个更基本的问题是对代码是同步的误解。以下调用是异步的:

mysql.query...
result.forEach...
mysql.query...
第一个是对的,但另外两个可能被误用了。我认为你实际上在寻找这样的东西:

// Mysql query...
mysql.query(messages_query, function(err, result) {

    // Add the results in socket...
    if(result.length > 0) {
        // messages array
        var messages = [];

        // Foreach 
        for (int i = 0; i < result.length; i++) {
            // User query...
            var user_query = 'SELECT id, username, avatar FROM users WHERE id = ' + result[i].from;

            // Second mysql query...
            mysql.query(user_query, function(err, userResult) {
                // Add result to global function
                if(userResult.length > 0) {
                    result[i].from = userResult.username;
                    messages.push(result[i]);
                }
                else {
                    console.log("User not found");
                }
            }); 
        }

        console.log(messages);
    }
    else {
        console.log("User not found");
    }
});

注意:虽然上述方法可能有效,但我的最大立场是,您只需更改messages\u查询以连接到users表,并在messages\u查询中获取所需的字段。这样做将意味着你没有转置结果的能力。

@这不应该令人惊讶。正如我所说,这只是猜测。没有足够的信息,问题也不够清楚,无法理解你需要什么。考虑一下注意事项:我最后离开了。