Javascript获取内部函数的返回值

时间:2020-02-08 17:44:13

标签: javascript sql-server

我具有以下函数,该函数获取用户名并通过查询mssql来检查databse中是否已存在。如果checkForUsername(),我希望recordSet.recordset.length >= 1返回true。我怎样才能做到这一点?我对异步/等待有点困惑。谢谢。

function checkForUsername(UserIn) {
    var dbConn = new sql.ConnectionPool(config);
    dbConn.connect().then(function () {
        var request = new sql.Request(dbConn);
        request.query("SELECT * from Admins WHERE username='"+UserIn+"';").then(function (recordSet) {
            console.log(recordSet.recordset.length);
            if(recordSet.recordset.length >= 1)
              //checkForUsername return true
            dbConn.close();
        }).catch(function (err) {
            dbConn.close();
        });
    }).catch(function (err) {
        console.log(err);
    });
}

2 个答案:

答案 0 :(得分:2)

我当然不能检查以下代码是否有效,但是您可以尝试为以下代码重写代码:

const checkForUsername = async user => {
  try {
    const
      dbConn = new sql.ConnectionPool(config),
      sqlObj = await dbConn.connect(),
      query = `SELECT * FROM Admins WHERE username='${user}';`, // Note that creating a query explicitly is not recommended as it is vulnerable to SQL injection attack!
      recordSet = await new sqlObj.Request(dbConn)query(query),
      hasRecords = !!recordSet.recordset.length;
      
    return hasRecords;
  } catch (error) {
    console.log(error);
  } finally {
    dbConn.close();
  }
}

// Call it
(async () => {
  console.log(await checkForUsername('Jhon due');
})();

答案 1 :(得分:0)

const checkForUsername = async UserIn => {
  try {
    var dbConn = new sql.ConnectionPool(config);
    const sqlObj = await dbConn.connect();
    const recordSet = await new sql.Request(dbConn).query(`SELECT * FROM Admins WHERE username='${UserIn}';`);
    const hasRecords = !!recordSet.recordset.length;      
    return hasRecords;
  }catch (error) {
    console.log(error);
  }finally{
    dbConn.close();
  }
}

// Call it
(async () => {
  console.log(await checkForUsername('John'));
})();