我有以下代码: 在文件的开头,我初始化了变量(var loginState = false;) 为什么console.log给我错误,尽管我将其更改为true
try {
const client = new SimpleGraphClient(tokenResponse.token);
const me = await client.getMe();
sql.connect(config, async function (err){
if (err) console.log(err);
var request = new sql.Request();
request.query(`SELECT * FROM tradebot.accounts WHERE username='${username}' AND password='${password}'`, async function (err, recordset){
if (err) console.log(err);
console.log(recordset);
if (recordset.recordset.length == 1) {
loginState = true;
} else {
loginState = false;
}
sql.close();
});
});
console.log(loginState);
if (loginState == true) {
await turnContext.sendActivity({
text: 'Work',
attachments: [CardFactory.adaptiveCard(mainmenu)]
});
} else {
await turnContext.sendActivity({
text: 'Dont work',
attachments: [CardFactory.adaptiveCard(internal_login)]
});
}
} catch (error) {
throw error;
}
答案 0 :(得分:0)
输入Bitmap
sql.connect()`,它会按您期望的方式工作。
console.log() inside
是一种异步方法,因此到sql.connect()
发生时,console.log()
尚未更改变量值。
sql.connect()
以上的执行顺序为
声明1
声明3
声明2
这就是为什么它发生的原因。
按如下所示更改代码以使其正常工作。
loginState = false; // Statement 1
sql.connect(config, async function (err) { // Statement 2
loginState = true;
})
console.log(loginState); // Statement 3
希望这会有所帮助!
答案 1 :(得分:-1)
原因是因为您正在将值设置为回调函数中的变量: 您必须等待查询结果。您调用查询的方式不可行。
看看-https://www.npmjs.com/package/mysql2
也请更改此部分-
sql.connect(config, async function (err){
if (err) console.log(err);
var request = new sql.Request();
request.query(`SELECT * FROM tradebot.accounts WHERE username='${username}' AND password='${password}'`, async function (err, recordset){
if (err) console.log(err);
console.log(recordset);
if (recordset.recordset.length == 1) {
loginState = true;
} else {
loginState = false;
}
sql.close();
});
});
将此更改为以下内容:
try{
let connection = await sql.connect(config);
let query1 = await connection.query(`SELECT * FROM tradebot.accounts WHERE username='${username}' AND password='${password}'`);
if (query1[0].recordset.length == 1) {
loginState = true;
} else {
loginState = false;
}
}catch (err){
// do something here
}