Need Help : How do I resolve this function?

Issue

const getDbInfo = (anArrayOfIDs) => {
    return new Promise(function(resolve, reject){
        let arrayOfDbInfoToSendBack = [];
        for(let i = 0; i <= anArrayOfIDs.length-1; i++){
            pool.query(
                "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = '" +
                anArrayOfIDs[i] +
            "';",
            async(err, res) => {
                if (err) {
                    console.log("error: ", err);
                  } else {
                      for(let k = 0; k <= res.length-1; k++){
                         arrayOfDbInfoToSendBack.push(res);
                          
                      }
                      resolve(arrayOfDbInfoToSendBack);
                      
                  }
            }
            );
            
        }
    });
}

Expected this function to return an array of objects with information. I suspect I am using resolve incorrectly and it sending back an array of only 1 object when I want an array of multiple objects in it.

Solution

In SQL every query is a promise, so there is no need to query inside a promise. To simplify the resolve, you can use async/await.

//Setting function asynchronous
const getDbInfo = async (anArrayOfIDs) => { 
    let arrayOfDbInfoToSendBack = [];
    for(let i = 0; i <= anArrayOfIDs.length-1; i++){
       let query = "SELECT * FROM `tbl_ofInfo` WHERE tbl_ofInfo.sqlID = '" + anArrayOfIDs[i] + "';"

       //Awaiting until the sql query resolved or rejected
       await pool.query(query,(err, res)=>{
           if (err) console.error(err)
           else {
               for(let k = 0; k <= res.length-1; k++){
                   arrayOfDbInfoToSendBack.push(res);
           }
       })
    }
}

Btw, I’m not sure this function will work if you declare it outside your route. Because Nodejs will try to execute it once the server is up and fails for the reason it cannot find an argument of anArrayOfIDs. So, use the function inside your route. If you have to use it often, move your function to a different .js file, export it from there and then import it as middleware to where you want to use it.

Answered By – jkalandarov

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published