Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erhalte ich einen Wert von einer MySQL-Abfrage außerhalb der Abfrageanweisung?

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.