tl; dr すべてがコールバックで発生します。
あなたはJavascriptの非同期性につまずきます。 console.log(value);
までに 呼び出しが実行されても、クエリは(必然的に)完了しません。そのため、その時点でクエリの結果を利用できるようにする方法はありません。
多くの開発者は、このようなパターンを使用し、コールバック関数を使用して、クエリ結果が到着したときに次のステップを処理します。
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
オブジェクトを使用すると、node.jsでこの種のことが読みやすくなります。しかし、それらを説明することは、とにかくStackOverflowの回答の範囲を超えています。