tl;dr allt händer i en återuppringning.
Du snubblar på den asynkrona naturen hos Javascript. När din console.log(value);
anropet körs, är frågan (nödvändigtvis) inte slutförd. Så det finns inget sätt för resultatet av frågan att vara tillgängligt vid den tidpunkten.
Många utvecklare använder ett mönster som detta, med en återuppringningsfunktion för att hantera nästa steg när frågeresultatet kommer.
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
objekt gör den här typen av saker lättare att läsa i node.js. Men att förklara dem är i alla fall utanför ramen för ett Stack Overflow-svar.