Return 使用打字稿 sql 查询后的布尔值
Return a boolean after a sql query with typescript
这是我的功能:
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.log(bool)
} else {
bool = false
console.log(bool)
}
})
console.log('boolean renvoyé: ', bool)
return bool
}
这是控制台的 return :
boolean renvoyé: false
true
函数的return本应为真却为假。
我不明白为什么 sql 请求没有阻止脚本。
bdd.query()
没有 return 承诺,并且您的 console.log()
和 return 语句在查询回调之外,这意味着它们发生在调用回调之前。您可以通过 return 承诺然后用您的 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.log('boolean renvoyé: ', bool)
resolve(bool)
})
});
}
这是我的功能:
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.log(bool)
} else {
bool = false
console.log(bool)
}
})
console.log('boolean renvoyé: ', bool)
return bool
}
这是控制台的 return :
boolean renvoyé: false
true
函数的return本应为真却为假。 我不明白为什么 sql 请求没有阻止脚本。
bdd.query()
没有 return 承诺,并且您的 console.log()
和 return 语句在查询回调之外,这意味着它们发生在调用回调之前。您可以通过 return 承诺然后用您的 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.log('boolean renvoyé: ', bool)
resolve(bool)
})
});
}