#javascript #node.js
#javascript #node.js
Вопрос:
Я пытаюсь получить MySQL в результате функции. На данный момент я пытаюсь установить результаты из функции в глобальный массив, но это не работает.
Я не очень хорошо знаком с NodeJS или Javascript, но я думаю, что это проблема области видимости.
Как бы это сделать надлежащим образом? Нужно ли мне использовать async или, возможно, возвращать результаты из функции?
Это то, что у меня есть на данный момент.
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'xxxx',
port : '3306',
user : 'xxxx',
password : 'xxxx',
database : 'xxxx'
});
var db_members =[];
get_members();
console.log(db_members); //outputs []
function get_members(){
connection.query("SELECT * FROM users", (err, result, fields)=>{
if (err) throw err;
result.forEach(function(row) {
db_members.push(row.username);
});
console.log(db_members); //this works
});
}
Ответ №1:
connection.query
это async
функция, поэтому вы не можете получить результат синхронно.
Это необходимо для того get_members
, чтобы возвращать Promise
в качестве возвращаемого значения, чтобы получать результат асинхронно при его использовании..
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'xxxx',
port : '3306',
user : 'xxxx',
password : 'xxxx',
database : 'xxxx'
});
function get_members() {
return new Promise((resolve, reject) => {
connection.query("SELECT * FROM users", (err, result, fields)=>{
if (err) return reject(err);
var db_members = [];
result.forEach(function(row) {
db_members.push(row.username);
});
return resolve(db_members);
});
});
}
get_members()
.then((members) => {
console.log(members); // This will work.
})
.catch((error) => {
console.error(error);
});