我对代码的预期用途是检查数据库是否具有以对象User形式传递给函数的用户名和密码。
我将success变量初始化为false。然后我说如果我找到记录,那么我会将其设置为true。但是,即使找到记录,成功变量仍然是假的。变量似乎没有更新。为什么? 另外,我怎样才能传回整个fetcheduser结果,同时我可以指出是否找到了记录?非常感谢
LoginSuccess : function (User) {
var success = false;
function isEmptyObject(obj) {
return !Object.keys(obj).length;
}
function isEmptyObject(obj) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
return false;
}
}
return true;
}
var sql = require('mssql');
var config = require('./configuration/sqlconfig');
var fetcheduser;
sql.connect(config).then(function () {
console.log('Connected to DB');
new sql.Request().query("SELECT * FROM dbo.LocalUser WHERE Username = '" + User.username + "' AND Password = '" + User.password + "';")
.then(function (recordset) {
if (isEmptyObject(recordset)) {
console.log("The User does not exist");
} else {
fetcheduser = JSON.parse(JSON.stringify(recordset));
success = true;
console.log("The user is existed.");
}
}).catch(function (err) {
//When errors come
});
});
return success;
}
答案 0 :(得分:0)
您需要返回您的承诺才能获得正确的success
州。像这样......
function LoginSuccess() {
var success = false;
return sql.connect(config)
.then(() => {
return new sql.Request().query(...).then(
() => success = true,
() => success = false
);
})
.then(() => {
return success;
});
}
LoginSuccess().then(success => ...);
答案 1 :(得分:0)
实际上 - 变量正在更新,但是太晚了 - 退回之后。尝试制作downloadUrl
并在返回后立即检查result = { success: false }
,并在5秒后(或任何适当的时候)检查result
,您会看到它已更改:setTimeout(() => console.log(result), 5000)
无论如何,为了生产,请寻求诺言解决方案。节点7.6终于现在异步/等待,所以你可以摆脱丑陋的...then
变通办法。