tl;dr alles geschieht in einem Rückruf.
Sie stolpern über die asynchrone Natur von Javascript. Zum Zeitpunkt Ihrer console.log(value);
Anruf läuft, die Abfrage wird (notwendigerweise) nicht abgeschlossen. Es gibt also keine Möglichkeit, dass das Ergebnis der Abfrage zu diesem Zeitpunkt verfügbar ist.
Viele Entwickler verwenden ein solches Muster mit einer Callback-Funktion, um den nächsten Schritt zu behandeln, wenn das Abfrageergebnis eintrifft.
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
Objekte machen solche Dinge in node.js leichter lesbar. Aber sie zu erklären, geht ohnehin über den Rahmen einer Stack Overflow-Antwort hinaus.