tl;dr tutto accade in una richiamata.
Stai inciampando nella natura asincrona di Javascript. Per il momento il tuo console.log(value);
la chiamata viene eseguita, la query non è (necessariamente) completata. Quindi, non è possibile che il risultato della query sia disponibile in quel momento.
Molti sviluppatori utilizzano un modello come questo, con una funzione di callback per gestire il passaggio successivo quando arriva il risultato della query.
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
gli oggetti rendono questo genere di cose più facili da leggere in node.js. Ma spiegarli va comunque oltre lo scopo di una risposta Stack Overflow.