2016-08-14 22 views
1

随意打印并不等待MySQL发送答复。Node.js不会等待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服务器[OK]
  2. // // INI
  3. 列表项
  4. // END //

但印有:

  1. // // INI
  2. // END //
  3. MySQL服务器[OK]
  4. 列表项

回答

1

这是Node.js的性质 - 回调和异步代码处理。 如果你想运行来代码数据库的响应将返回后,将回调中的代码:

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(); 
+0

感谢,他想知道,如果他们能做到这一点syncrona SQL查询,但显然不是,它伤害! –

+1

有很多原因,你不应该在节点:)执行同步的东西 –

+0

为什么我需要:(必须同步,这适应一个PHP脚本节点,我发现这个问题:( –