Javascript node.js程序执行流程不明确

Javascript node.js程序执行流程不明确,javascript,node.js,Javascript,Node.js,请在下面查找代码 在代码中我仍然无法理解的是,为什么浏览器在执行下一个查询之前一直等待10秒。是否应该将睡眠查询传递给数据库,然后立即执行下一个查询 var http = require('http'); var mysql = require('mysql'); http.createServer(function (request, response) { var connection = mysql.createConnection({ host: 'localhost',

请在下面查找代码

在代码中我仍然无法理解的是,为什么浏览器在执行下一个查询之前一直等待10秒。是否应该将睡眠查询传递给数据库,然后立即执行下一个查询

var http = require('http');
var mysql = require('mysql');

http.createServer(function (request, response) {

var connection = mysql.createConnection({

    host: 'localhost',
    user: 'root',
    password: '',
    database: 'pops',    
    dateStrings: 'true',
    multipleStatements: 'true'
});

// Connect to MySQL (if there is an error, report it and terminate the request)
connection.connect (function (err) {
    // connected! (unless `err` is set)

    if (err !== null)
    {
        console.log('Error '+err.code);
    }
    else
    {
        console.log('Connection to database successful!');
    }
});

 connection.query("SELECT sleep(10);", function(err, rows) {

        // There was a error or not?
        if (err !== null)
        {
            console.log("Query Rrror:" + err);
        }
        else
        {
            // Shows the result on console window              
              console.log("called after 10 seconds");              
        } 
 });

 connection.query("SELECT * FROM team", function(error, result) {

        // There was a error or not?
        if (error !== null)
        {
            console.log("Query Rrror:" + error);
        }
        else
        {
            // Shows the result on console window
              response.writeHead(200, {"Content-Type": "text/html"});
              length = result.length - 1;

              for(var i = 0; i <= length; i++)
              {
                  row_obj = result[i];

                  team_id = row_obj.id;
                  team_name = row_obj.team_name;
                  team_color = row_obj.color;
                  created_at = row_obj.created_at;

                  response.write('Team ID: ' + team_id + '<br />');
                  response.write('Team Name: ' + team_name + '<br />');
                  response.write('Team Color: ' + team_color + '<br />');
                  response.write('Creation Date: ' + created_at + '<br />');
                  response.write('<br /><br />');
              }

              response.end("OK");
        } 
 });

 // Close connection
 connection.end();

 }).listen(8080, "127.0.0.1");
var http=require('http');
var mysql=require('mysql');
createServer(函数(请求、响应){
var connection=mysql.createConnection({
主机:“localhost”,
用户:'根',
密码:“”,
数据库:“pops”,
日期字符串:“true”,
多重陈述:“真实”
});
//连接到MySQL(如果有错误,报告并终止请求)
connection.connect(函数(err){
//已连接!(除非设置了“err”)
如果(错误!==null)
{
console.log('错误'+错误代码);
}
其他的
{
log('连接到数据库成功!');
}
});
查询(“选择睡眠(10);”,函数(错误,行){
//是否有错误?
如果(错误!==null)
{
日志(“查询错误:+err”);
}
其他的
{
//在控制台窗口上显示结果
log(“10秒后调用”);
} 
});
connection.query(“从团队中选择*”,函数(错误、结果){
//是否有错误?
如果(错误!==null)
{
日志(“查询错误:+错误”);
}
其他的
{
//在控制台窗口上显示结果
writeHead(200,{“内容类型”:“text/html”});
长度=结果。长度-1;

对于(var i=0;i首先,您应该在httpRequest处理程序外部创建mysql连接


是的,Node.JS将在不等待的情况下执行这两个查询,但我认为发生的情况是,
Node mysql
正在对查询进行排队。

嗯,我没有尝试过
mysql
npm,但不是
。connect
。query
异步工作?我认为Pedro回答的是正确的。你能添加y的输出吗你在控制台中看到了吗?这将显示正在执行/结束的步骤以及顺序。实际上,我感觉睡眠操作使node js进入阻塞模式,它只是阻塞任何请求,直到10秒结束。我说的对吗?它不是node.js,可能是你正在使用的模块。