@hello_itsme

Как отдать данные из запроса mysql в функции node.js?

Есть такая функция:
var mysql = require('mysql');
db = mysql.createConnection({
  host     : '...',
  user     : '...',
  password : '...',
  database : '...'
});
useItem = function(socket, item_id, amount){
  if(amount >= 1){
    db.query('SELECT ...', function(err, rows) {
      if(rows.length > 0){
        if(rows[0].amount >= amount){
          if((rows[0].amount-amount) >= 1){
            db.query('UPDATE ...');
          }else{
            db.query('DELETE ...');
          }
          return true;
        }else{
          socket.emit('alert', { message: "..." });
          return false;
        }
      }else{
        socket.emit('alert', { message: "..." });
        return false;
      }
    });
  }else{
    socket.emit('alert', { message: "..." });
    return false;
  }
}

Функция предназначена для списания предмета из инвентаря пользователя и будет использоваться в других функциях, соответственно должна возвращать true\false для выполнения дальнейших действий. Проблема заключается в том, что обращение к БД - асинхронное (db.query...) и return оттуда работает не совсем так, как нужно. Как можно решить проблему?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
atlantech
@atlantech
Full Stack Software Developer
Нужно чтобы функция useItem вернула promise-объект, внешний код будет работать с ним. В теле функции, после того как отработал запрос, вы сможете сделать resolve или reject этого промиса с необходимыми параметрами.

Попробуйте воспользоваться, например, вот этим - https://www.npmjs.com/package/promise.
habrahabr.ru/post/209662
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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