tl;dr vše se děje při zpětném volání.
Zakopáváte o asynchronní povahu Javascriptu. Do doby vašeho console.log(value);
probíhá volání, dotaz není (nezbytně) dokončen. Není tedy možné, aby byl v tu chvíli k dispozici výsledek dotazu.
Mnoho vývojářů používá podobný vzorec s funkcí zpětného volání, která zpracuje další krok, když dorazí výsledek dotazu.
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
objekty usnadňují čtení takových věcí v node.js. Ale jejich vysvětlení je mimo rámec odpovědi Stack Overflow.