Тъй като node.js е неблокиращ и асинхронен, тогава в този код:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
self.users = results;
}
});
console.log(this.users);
данните от DB вероятно все още не са заредени в потребителска променлива, когато се опитвате да ги влезете в конзолата. Можете да го проверите, ако направите своя console.log
операция в рамките на заявката, например:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
console.log(results);
}
});
За да предадете резултата в променлива, когато операцията приключи, можете да обвиете извикването на клиентската DB във функция с параметър за обратно извикване и да зададете променливата си, когато обратното извикване е извикано, например:
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);
});
Кодът по-горе е само концепция.