Вот эта функция, как показано ниже console.log
function quo (value){
value = connection.query(
'SELECT role from 'roles' where 'id' = 1' ,
function (error, results, fields) {
if (error) throw error;
console.log('The role is: ', results[0].role);// result here The role is : admin
});
console.log(value);
}
Результат здесь - объект запроса Query {domain: null, _events: {error:.. etc} ##
Я вызываю это так:
quo();
tl; dr все происходит в обратном вызове.
Вы отключаетесь от асинхронного характера Javascript. К тому времени ваш console.log(value);
вызов выполняется, запрос не завершен (обязательно). Таким образом, в то время нет возможности получить результат запроса.
Многие разработчики используют шаблон, подобный этому, с функцией обратного вызова для обработки следующего шага при достижении результата запроса.
function quo (success){
value = connection.query(
'SELECT role from 'roles' where 'id' = 1' ,
function (error, results, fields) {
if (error) throw error;
console.log('The role is: ', results[0].role);
success (results[0].role);
});
}
quo (function (role) {
console.log(role);
/* do something useful with the role that came back from the query */
});
Объекты Promise
делают эту вещь проще читать в node.js. Но объяснение их в любом случае выходит за рамки ответа на переполнение стека.
function quo (success){
value = connection.query(
'SELECT role from 'roles' where 'id' = 1' ,
function (error, results, fields) {
if (error) throw error;
console.log('The role is: ', results[0].role);
success (results[0].role);
});
}
quo (function (role) {
console.log(role);
/* do something useful with the role that came back from the query */
});