Mysql查询返回空对象

我在nodeJS中使用mysql包查询我的结果,但在检索数据时遇到困难

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : 'PASSWORD', database : 'ambuCenter' }); var data; function do_queries(callback){ connection.connect(); connection.query( "SELECT * FROM customers", function(err,result,fields){ if (err) return callback(err,null); callback(err,result); } ); connection.end(); } function request_handler(){ do_queries( function(err, result){ if(err) throw err; data = JSON.stringify(result); data = JSON.parse(data); console.log(data); } ); } request_handler(); console.log(data); 

第一个console.log(数据)正在返回一个对象,但最后一个返回未定义的值

 Manishs-MacBook-Air:Models manishbaghel$ node db_model.js undefined [ { id: 1, name: 'John', address: 'Highway 71' }, { id: 2, name: 'Peter', address: 'Lowstreet 4' }, { id: 3, name: 'Amy', address: 'Apple st 652' }, { id: 4, name: 'Hannah', address: 'Mountain 21' }, { id: 5, name: 'Michael', address: 'Valley 345' }, { id: 6, name: 'Sandy', address: 'Ocean blvd 2' }, { id: 7, name: 'Betty', address: 'Green Grass 1' }, { id: 8, name: 'Richard', address: 'Sky st 331' }, { id: 9, name: 'Susan', address: 'One way 98' }, ] 

传递给do_queriescallback参数(函数)在单独的线程(即asynchronous)中执行。 所以,这是发生了什么事情:

  1. 线程1调用do_queries ,这反过来又产生一个新的线程(比如线程2)
  2. 线程1调用request_handler
  3. 线程1调用console.log
  4. 线程2使数据库调用,并返回到callback函数

但是,顺序不完全相同,因为这两个操作是彼此独立且asynchronous执行的,所以不能保证在最后一个console.log被调用之前data将被分配任何值。 因此,你得到undefined

另外,不build议从callback函数更新/更改全局variables,所以您可能需要更改逻辑并将更新移动到callback函数。