Javascript node.js程序执行流程不明确
请在下面查找代码 在代码中我仍然无法理解的是,为什么浏览器在执行下一个查询之前一直等待10秒。是否应该将睡眠查询传递给数据库,然后立即执行下一个查询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',
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,可能是你正在使用的模块。