@iMainDay

Как получить значение mysql query вне функции?

У меня есть два файла, index.js и db.js
В db.js у меня есть функция get_balance которая принимает в себя user_id и внутри себя получает нужное значение баланса пользователя по заданному ид.
Сама функция:
function get_balance(user_id) {
    conn.query(`SELECT * FROM users WHERE user_id = ${user_id}`, (err, result) => {
        console.log(result[0].balance) // 0 (как и надо)
    })
}

Как мне можно правильно в index.js получить значение выполненной функции get_balance?
Пытался получать так:
var results  = get_balance(ctx.message.from.id)
console.log(results) // undefined

Пробовал много различных способов:
И с помощью return result[0].balance и с помощью переменных, ничего пока что не помогло.
Все время возвращается undefined в index.js но если вернуть значение в функции то все прекрасно возвращается, но, мне необходимо вывести result[0].balance именно в index.js.
Прошу не бить палками, еще пока зеленый в этом.
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
query - асинхронная функция. К моменту получения данных из MySQL и вызова callback'а сама функция get_balance уже завершилась.
Оборачивайте вызов в Promise и используйте async/await. Примерно так:
async function get_balance(user_id) {
  return new Promise((resolve, reject) => {
    conn.query(
      `SELECT * FROM users WHERE user_id = ${user_id}`,
      (err, result) => {
        if (err) {
          reject(err);
        }
        console.log(result[0].balance) // 0 (как и надо)
        resolve(result[0].balance);
      },
    );
  });
}

const result = await get_balance(ctx.message.from.id);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы