tl;dr todo sucede en una devolución de llamada.
Estás tropezando con la naturaleza asíncrona de Javascript. Para cuando su console.log(value);
se ejecuta la llamada, la consulta no se completa (necesariamente). Por lo tanto, no hay forma de que el resultado de la consulta esté disponible en ese momento.
Muchos desarrolladores usan un patrón como este, con una función de devolución de llamada para manejar el siguiente paso cuando llega el resultado de la consulta.
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
Los objetos hacen que este tipo de cosas sean más fáciles de leer en node.js. Pero explicarlos está más allá del alcance de una respuesta de Stack Overflow de todos modos.