tl;dr alt sker i et tilbagekald.
Du falder over Javascripts asynkrone natur. Når din console.log(value);
opkaldet kører, er forespørgslen ikke (nødvendigvis) afsluttet. Så resultatet af forespørgslen er ikke tilgængeligt på det tidspunkt.
Mange udviklere bruger et mønster som dette med en tilbagekaldsfunktion til at håndtere det næste trin, når forespørgselsresultatet ankommer.
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
objekter gør denne slags ting nemmere at læse i node.js. Men at forklare dem er under alle omstændigheder uden for rækkevidden af et Stack Overflow-svar.