我遇到了一个问题,即我的代码在继续执行之前没有等待查询完成,因此导致:
>> Quote Doesnt Exists
>> Checked Amount of quotes in database
>> undefined
这种情况在不到一秒钟的时间内发生,然后跟着定义了变量$ {number},有没有办法让我的程序在继续进行之前等待数字被定义?
// check if quote exists
await con.query(`SELECT * FROM quotes WHERE quote = '${args.join(" ")}'`, (err, rows) => {
if (err) console.log(err);
if (rows[0] == undefined) {
turnback = false;
return;
} else if (rows[0].quote) {
turnback = true;
return client.say(channel, `That quote is already inside of the database!`)
}
})
console.log("Quote Doesnt Exists")
// return if it hasnt already (turnback)
if (turnback == true) return;
// creating variable "number" to be defined later
var number;
// check amount of quotes in database
await con.query(`SELECT COUNT(*) AS cnt FROM quotes`, (err, rows) => {
if (err) console.log(err);
if (rows[0].cnt) {
// defining variable
number = (rows[0].cnt + 1)
} else {
number = 1
}
})
console.log("Checked Amount of quotes in database")
console.log(number)
// creating variable "succsess" to be defined later
var success;
// insert quote into database
await con.query(`INSERT INTO quotes (quote, id) VALUES ("${args.join(" ")}", "${number}");`, (err) => {
if (err) {
console.log(err)
success = false
} else {
success = true
}
})
// sending conformation to user
if (success == true) {
client.say(channel, `Successfully inserted quote #${number} into database`)
} else if (success == false) {
client.say(channel, `Something went wrong, I failed to Insert The quote into the database!`)
}
答案 0 :(得分:1)
问题是您试图使回调方法无法与await
一起使用,因为await
仅在结果或await
之后的语句为promise
。
这应该可以解决您的问题。
var success;
try {
// check if quote exists
await new Promise((resolve, reject) => {
con.query(
`SELECT * FROM quotes WHERE quote = '${args.join(" ")}'`,
(err, rows) => {
if (err) reject(err);
if (rows[0] == undefined) {
turnback = false;
resolve();
} else if (rows[0].quote) {
turnback = true;
client.say(channel, `That quote is already inside of the database!`);
resolve();
}
}
);
});
console.log("Quote Doesnt Exists");
// return if it hasnt already (turnback)
if (turnback == true) return;
// creating variable "number" to be defined later
var number;
// check amount of quotes in database
await new Promise((resolve, reject) => {
con.query(`SELECT COUNT(*) AS cnt FROM quotes`, (err, rows) => {
if (err) reject(err);
if (rows[0].cnt) {
// defining variable
number = rows[0].cnt + 1;
resolve();
} else {
number = 1;
resolve();
}
});
});
console.log("Checked Amount of quotes in database");
console.log(number);
// creating variable "succsess" to be defined later
// insert quote into database
await new Promise((resolve, reject) => {
con.query(
`INSERT INTO quotes (quote, id) VALUES ("${args.join(
" "
)}", "${number}");`,
(err) => {
if (err) {
console.log(err);
success = false;
resolve();
} else {
success = true;
resolve();
}
}
);
});
} catch (error) {
success = false;
}
// sending conformation to user
if (success == true) {
client.say(channel, `Successfully inserted quote #${number} into database`);
} else if (success == false) {
client.say(
channel,
`Something went wrong, I failed to Insert The quote into the database!`
);
}