我知道这听起来应该是一个简单的谷歌修复,但我现在已经旋转了一段时间。
我使用MSSQL中间件将我的快速应用程序连接到MSSQL数据库。
它运行一个存储过程,只返回" true"或者" false",它成功了。我的问题是当它返回" var login"时,到我运行其后的代码时,实际的查询还没有返回一个值。控制台输出通常如下所示:
控制台
with open('..\Test.csv', 'w', newline='') as dest:
writer = csv.writer(dest,dialect='excel')
# header line
writer.writerow(['ImageId', 'Class', 'WKT'])
writer.writerow([image_name, int(c), prediction])
路由
login is of type: undefined //from console.log executed after db.userLogin is called
returned is: true
db.userLogin
userdetails = {};
userdetails.username = "username";
userdetails.email = "email@email.test";
userDetails = JSON.stringify(userDetails);
var login = db.userLogin(activeConnection, userDetails);
console.log("login is of type: " + typeof (login));
我尝试让 var login 包含" true"或"假"由 userLogin 方法返回。
userLogin 只是一个正常的功能,它不是一个承诺(我对Promises的理解非常不稳定,所以我对它是否真的返回没有信心承诺)。
从我阅读的文档和实验中, request.execute(...)会返回一个承诺,这就是我使用" .then"之后运行代码。然而,内部"。然后"功能,似乎返回返回,尚未分配" true"或"假"然而。 var login 在打印出类型时也会显示为 undefined
我知道它与承诺有关,但是返回的每一个组合,.catch,然后我都能想到并没有给我任何真正的结果。
编辑:添加了我正在使用的实际完整代码块,以及澄清我认为返回承诺的内容,以及只是正常的函数调用。
答案 0 :(得分:0)
您需要在userLogin操作完成后执行的回调中运行console.log("login is of type: " + typeof (login));
。所以你可能需要这样的东西:
var login = db.userLogin(activeConnection, userDetails).then(yourCallback);
function yourCallback(param) {
console.log("login is of type: " + typeof (login));
}
答案 1 :(得分:0)
如果db.userLogin()
返回承诺,则可以执行此操作
db.userLogin(activeConnection, userDetails)
.then(function(login) {
console.log(login)
}).catch(function(err) {
console.log(err);
});
<强> db.userLogin 强>
// ... code
return request.execute('loginUser').then(function (recordsets) {
console.log(recordsets[0].length);
var returned = recordsets[0][0].UserExists;
console.log("returned is: " + returned);
return returned;
});