我在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(data)返回一个对象, 但最后一个是返回未定义的值
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' },
]
答案 0 :(得分:0)
传递给callback
的{{1}}参数(函数)在一个单独的线程中执行(即异步)。所以,这就是:
do_queries
,后者又生成一个新线程(比如线程2)do_queries
request_handler
但是,顺序不会完全相同,因为两个操作彼此独立且异步执行,无法保证console.log
在最后data
之前分配任何值调用。因此,您得到console.log
。
此外,不建议从回调函数更新/更改全局变量,因此您可能需要更改逻辑并将更新移至回调函数。