Ponieważ node.js jest nieblokujący i asynchroniczny, to w tym kodzie:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
self.users = results;
}
});
console.log(this.users);
dane z bazy danych prawdopodobnie nie są jeszcze ładowane do zmiennej users podczas próby zalogowania jej do konsoli. Możesz to sprawdzić, jeśli wykonasz swój console.log
operacja w obrębie zapytania, na przykład:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
console.log(results);
}
});
Aby przekazać wynik do zmiennej po zakończeniu operacji, możesz opakować wywołanie bazy danych klienta w funkcję z parametrem wywołania zwrotnego i ustawić zmienną po wywołaniu wywołania zwrotnego, na przykład:
function query(sql, callback) {
client.query(sql, function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
callback(results);
}
});
}
query("SELECT * FROM users", function(results) {
self.users = results;
console.log(self.users);
});
Powyższy kod to tylko koncepcja.