Mysql查询返回空对象

时间:2017-09-07 08:37:32

标签: mysql node.js

我在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' },
]

1 个答案:

答案 0 :(得分:0)

传递给callback的{​​{1}}参数(函数)在一个单独的线程中执行(即异步)。所以,这就是:

  1. 线程1调用do_queries,后者又生成一个新线程(比如线程2)
  2. 主题1调用do_queries
  3. 主题1调用request_handler
  4. 线程2进行db调用并返回回调函数
  5. 但是,顺序不会完全相同,因为两个操作彼此独立且异步执行,无法保证console.log在最后data之前分配任何值调用。因此,您得到console.log

    此外,不建议从回调函数更新/更改全局变量,因此您可能需要更改逻辑并将更新移至回调函数。

相关问题