Получение результата mysql из функции javascript в node.js

#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);
  });