#javascript #mysql #promise
#javascript #mysql #обещание
Вопрос:
Я совсем новичок в Node JS и пытаюсь использовать базу данных mysql.
Я попробовал другую вещь, например, использовать promise для получения результата моего запроса, но ожидание пропущено, и обещание находится на рассмотрении.
Я немного растерялся, если кто-нибудь может объяснить мне, как это работает.
import * as CMD from "../command/importCommand.js";
export class Message {
constructor(bot, database) {
this.bot = bot;
this.db = database;
}
eventHandler(msg) {
const guild = msg.guild;
const prefix = this.db.getPrefixFromGuild(guild);
console.log(prefix);
//
//
}
}
import * as mysql from "mysql";
export class Database {
constructor() {
this.db = new mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
this.db.connect(err => {
if (err) throw err;
console.log('DB connected');
});
}
async getPrefixFromGuild(guild) {
let prefix = await this.getPrefixFromGuildId(guild.id);
return prefix;
}
async getPrefixFromGuildId(guildId) {
let prefix = await this.query("select prefix from serveur where id_serveur=" guildId ";");
return prefix;
}
query(sql) {
return this.db.query(sql, (err, rows) => {
if (err)
throw err;
console.log(rows);
return rows;
});
}
}
Ответ №1:
Ваш eventHandler
не является async
функцией и не ожидает обещания, возвращенного из getPrefixFromGuild()
. console.log()
Оператор просто регистрирует обещание, а не его результат. Попробуйте это:
async eventHandler(msg) {
const guild = msg.guild;
const prefix = await this.db.getPrefixFromGuild(guild);
console.log(prefix);
}
Пожалуйста, также обратите внимание, что если вы получаете доступ к экземпляру вашего Database
класса сразу после создания, он может не быть инициализирован, поскольку конструктор не ожидает conntect()
завершения (это не должно, но вы должны найти другой способ предотвратить доступ к неинициализированному Database
объекту).