NodeJS和mysql:等待查询结果

我有一个用nodejs + express做的小项目,我也做了一些小的服务,在它的某些页面上共享。

var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 100, host : 'host', user : 'user', password : 'password', database : 'database', debug : false }); function executeQuery(query, callback) { pool.getConnection(function (err, connection) { if (err) { return callback(err, null); } else if (connection) { connection.query(query, function (err, rows, fields) { connection.release(); if (err) { return callback(err, null); } return callback(null, rows); }) } else { return callback("No connection", null); } }); } function getResult(query) { return executeQuery(query, function (err, rows) { if (!err) { return rows; } else { console.log(err); } }); } function getServers() { var list = getResult("select * from table"); return list; } exports.getList = getList; 

现在,我的问题是:当我调用module.GetServers(); 从另一个模块,结果总是未定义的,因为pool.getConnection是asynchronous(我想,我很新),所以executeQuery不会产生任何结果。 我怎么能强迫executeQuery等待由connection.query产生的结果?

在你的executeQuery函数中,你使用callback来等待结果。 以相同的方式,通过在getResult函数中实现它们,可以使查询执行后等待结果。 像这样的东西。

 var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 100, host : 'host', user : 'user', password : 'password', database : 'database', debug : false }); function executeQuery(query, callback) { pool.getConnection(function (err, connection) { if (err) { return callback(err, null); } else if (connection) { connection.query(query, function (err, rows, fields) { connection.release(); if (err) { return callback(err, null); } return callback(null, rows); }) } else { return callback(true, "No Connection"); } }); } function getResult(query,callback) { executeQuery(query, function (err, rows) { if (!err) { callback(null,rows); } else { callback(true,err); } }); } function getServers() { getResult("select * from table",function(err,rows){ if(!err){ return rows; }else{ console.log(err); } }); } exports.getList = getList;