Monstermania
Monstermania

Reputation: 97

Javascript get returned value of inside functions

I have the following function that gets a username and by making a query to mssql checks if already exists in databse. I want the checkForUsername() to return true if recordSet.recordset.length >= 1. How can I do that? I am a bit confused about async/await. Thanks.

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

Upvotes: 1

Views: 73

Answers (2)

Nave Sade
Nave Sade

Reputation: 441

Of course I can't check if the following code works, but you can try rewriting your code for something like this:

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');
})();

Upvotes: 2

Monstermania
Monstermania

Reputation: 97

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'));
})();

Upvotes: 0

Related Questions