布尔值未设置为true node.js
我有以下代码: 在文件的开头,我初始化了变量(var loginState=false;) 为什么console.log给我false,尽管我将其更改为true布尔值未设置为true node.js,node.js,botframework,Node.js,Botframework,我有以下代码: 在文件的开头,我初始化了变量(var loginState=false;) 为什么console.log给我false,尽管我将其更改为true try { const client = new SimpleGraphClient(tokenResponse.token); const me = await client.getMe(); sql.connect(config, async function (err){
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;
}
将console.log()放在sql.connect()中,`,它的工作方式符合您的预期
sql.connect()
是一种异步方法,因此当console.log()
发生时,sql.connect()
尚未更改变量值
loginState = false; // Statement 1
sql.connect(config, async function (err) { // Statement 2
loginState = true;
})
console.log(loginState); // Statement 3
上述条款的执行顺序为:
报表1
报表3
报表2
这就是为什么它会发生
按如下方式更改代码,使其正常工作
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) {
await turnContext.sendActivity({
text: 'Work',
attachments: [CardFactory.adaptiveCard(mainmenu)]
});
} else {
await turnContext.sendActivity({
text: 'Dont work',
attachments: [CardFactory.adaptiveCard(internal_login)]
});
}
sql.close();
});
});
} catch (error) {
throw error;
}
希望这有帮助 原因是您正在回调函数中将值设置为变量:
您必须等待查询结果。您调用查询的方式不可行
看看-
亦将本部更改为—
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
}
可能是重复的Downvoter,你能解释一下答案有什么问题吗?