Это моя функция:
static async isExiste (email: string) {
const bdd = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE,
socketPath: process.env.SOCKETPATH,
port: parseInt((process.env.PORTMYSQL === undefined) ? '3306' : process.env.PORTMYSQL)
})
const emailExist = `SELECT 1 FROM user WHERE email='${email}'`
let bool = false
await bdd.query(emailExist, (err, result) => {
if (result[0]) {
bool = true
console.info(bool)
} else {
bool = false
console.info(bool)
}
})
console.info('boolean renvoyé: ', bool)
return bool
}
И это возвращение консоли:
boolean renvoyé: false
true
Возврат функции является ложным, когда он должен быть истинным. Я не понимаю, почему запрос sql не блокирует скрипт.
bdd.query()
не возвращает промис, а ваши операторы console.info()
и return находятся за пределами обратного вызова запроса, то есть они происходят до вызова обратного вызова. Вы можете исправить это, вернув обещание, а затем разрешив обещание с вашим возвращаемым значением. Изменение вашего кода, чтобы он выглядел примерно так, должно работать:
static isExiste (email: string) {
return new Promise((resolve, reject) => {
const bdd = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE,
socketPath: process.env.SOCKETPATH,
port: parseInt((process.env.PORTMYSQL === undefined) ? '3306' : process.env.PORTMYSQL)
})
const emailExist = `SELECT 1 FROM user WHERE email='${email}'`
bdd.query(emailExist, (err, result) => {
if (err) {
reject(err);
return;
}
const bool = !!result[0];
console.info('boolean renvoyé: ', bool)
resolve(bool)
})
});
}