Node.js不会等待MySQL服务器发送答案,并继续asynchronous工作

随便打印,不要等MySQL发送回复。

var mysql=require('mysql').createConnection({ host:'localhost',user:'root',password:'',database:'dbname',port:3306 }); mysql.connect(function(error){if(error){throw error;}else{console.log('MYSQL SERVER [OK]');}}); console.log('// INI //'); var sql='SELECT * FROM sys_users'; mysql.query(sql,function(error,rows){ if(!error){ for(i=0;i<rows.length;i++){ if(i<rows.length-1) console.log(rows[i].username); else console.log(rows[i].username); } }else console.log('Error'); }); console.log('// END //'); mysql.end(); 

将不得不打印:

  1. MYSQL SERVER [确定]
  2. // INI //
  3. 项目清单
  4. // 结束 //

但印有:

  1. // INI //
  2. // 结束 //
  3. MYSQL SERVER [确定]
  4. 项目清单

这是Node.js的本质 – callback和asynchronous代码处理。 如果你想在返回数据库响应之后运行come代码,将该代码放在callback中:

 mysql.query(sql,function(error,rows){ if (!error){ for(i=0;i<rows.length;i++){ if(i<rows.length-1) console.log(rows[i].username); else console.log(rows[i].username); } } else { console.log('Error'); } /* Code to run. Move it to first `if`, if you want to run it only, when no error will occur. */ console.log('//END //'); }); mysql.end();