S.G
S.G

Reputation: 11

Return undefined value outside the loop

I'm using a for loop for checking the queries I've read before, and after I adding the wrong queries to a map and return the map I received 'undefined'. I'm using async functions but it didn't help.

This is the function:

async function validateQueryResult(connection, queries) {
var result;
var alertsList = new Map();

return new Promise((resolve, reject) => {
    for (query in queries) {
        connection.execute({
            sqlText: queries[query]["query"],
            complete: function (err, stmt, rows) {
                if (err) {
                    console.error('Failed to execute query ' + queries[query]["query"] + ' due to the following error: ' + err.message);
                }
                else {
                    rows[0].toString();
                    result = Object.values(rows[0]);
                    if (result[0] > 0) {
                        alertsList.set(queries[query], result[0]);
                    }
                }
            }
        });
    }
   resolve(alertsList);
})

}

Thanks for help!

Upvotes: 0

Views: 31

Answers (1)

user6749601
user6749601

Reputation:

Your problem is, that connection.execute() is another async call. And your for-loop is done before any of the expected answers returns. Try it this way:

async function validateQueryResult(connection, queries) {
  var result;
  var alertsList = new Map();
 
  return new Promise((resolve, reject) => {
     for (query in queries) {
           const result = await this.execute(query);

           if (result && result[0] > 0) {
               alertsList.set(queries[query], result[0]);
           }
     }
    resolve(alertsList);
  })
}


async function execute(query) {
   connection.execute({
      sqlText: queries[query]["query"],
      complete: function (err, stmt, rows) {
      
      if (err) {
         console.error('Failed to execute query ' + queries[query]["query"] + ' due to the following error: ' + err.message);
       }
       else {
           rows[0].toString();
           return Object.values(rows[0]);
       }
      }

   });
}

Upvotes: 1

Related Questions