tl;dr tout se passe dans un rappel.
Vous trébuchez sur la nature asynchrone de Javascript. Au moment où votre console.log(value);
l'appel s'exécute, la requête n'est pas (nécessairement) terminée. Il est donc impossible que le résultat de la requête soit disponible à ce moment-là.
De nombreux développeurs utilisent un modèle comme celui-ci, avec une fonction de rappel pour gérer l'étape suivante lorsque le résultat de la requête arrive.
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
les objets rendent ce genre de chose plus facile à lire dans node.js. Mais les expliquer dépasse de toute façon la portée d'une réponse Stack Overflow.