Возврат результатов MySql из функции с обещанием / разрешением и асинхронным / ожиданием - PullRequest
0 голосов
/ 01 марта 2019

Редактировать: Ответ на вопрос.Код правильный, просто нужно перебрать результаты или получить доступ к каждому элементу по отдельности.

Я пишу бот Discord с MySql.Мне нужно проверить таблицу на наличие пользователя, прежде чем я смогу выполнить другую обработку.Основной корпус (здесь не показан) устанавливает соединение и собирает пользовательские команды, вызывая соответствующий модуль.В этом случае args [0] будет иметь значение для поиска в таблице.Похоже, что сроки строк обещания и ожидания правильные, так как «Результаты» выводятся после возврата testUser.Однако результаты возвращают [объектный объект] вместо строк (таблица не пуста).Разве не разрешать (строки) внутри функции возвращать выбранные строки?Я пытаюсь избежать добавления дополнительных модулей, если мне не нужно.

const discord = require("discord.js");
const mySql = require("mysql");

module.exports.run = async (bot, message, args, conn) => {

const results = await testUser(args[0], conn);
console.log("Results: " + results);
}

function testUser(userName, conn) {
    return new Promise((resolve, reject) => {
        conn.query(`SELECT * FROM user_master WHERE user_name = 
    '${userName}'`, (err, rows) => {
            if(err) reject(err);
            else resolve(rows);
        });
    });
}

1 Ответ

0 голосов
/ 02 марта 2019

Возвращенный Object содержит результат запроса и может быть запрошен, как указано в комментариях.Чтобы привести полный пример, это будет ваш код, включая зацикливание возвращаемого результата:

const discord = require("discord.js");
const mySql = require("mysql");

module.exports.run = async (bot, message, args, conn) => {

  const results = await testUser(args[0], conn);
  results.forEach((row) => { 
    console.log(row); 
  });
}

function testUser(userName, conn) {
    return new Promise((resolve, reject) => {
        conn.query(`SELECT * FROM user_master WHERE user_name = 
    '${userName}'`, (err, rows) => {
            if(err) reject(err);
            else resolve(rows);
        });
    });
}
...