运行异步查询并在完成后返回结果

时间:2017-02-01 03:29:55

标签: javascript express

我知道这听起来应该是一个简单的谷歌修复,但我现在已经旋转了一段时间。

我使用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,然后我都能想到并没有给我任何真正的结果。

编辑:添加了我正在使用的实际完整代码块,以及澄清我认为返回承诺的内容,以及只是正常的函数调用。

2 个答案:

答案 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;
});