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_queries
的callback
参数(函数)在单独的线程(即asynchronous)中执行。 所以,这是发生了什么事情:
- 线程1调用
do_queries
,这反过来又产生一个新的线程(比如线程2) - 线程1调用
request_handler
- 线程1调用
console.log
- 线程2使数据库调用,并返回到callback函数
但是,顺序不完全相同,因为这两个操作是彼此独立且asynchronous执行的,所以不能保证在最后一个console.log
被调用之前data
将被分配任何值。 因此,你得到undefined
。
另外,不build议从callback函数更新/更改全局variables,所以您可能需要更改逻辑并将更新移动到callback函数。