У меня есть небольшой проект с узлом nodejs + express, и я также сделал небольшой сервис для совместного использования на некоторых его страницах.NodeJS и mysql: дождаться результата запроса
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 является асинхронным (я полагаю, я совершенно новый), поэтому executeQuery не дает результата. Как заставить execQuery ждать получения результата connection.query?
Обратите внимание, что все методы nodejs принимают функцию обратного вызова в качестве параметра - вам нужно сделать то же самое в своей функции getServers. Затем, когда вы возвращаете строки из запроса, вызовите обратный вызов, передав строки в качестве параметра. – adelphus