Minirock
Minirock

Reputation: 666

Waiting query result

I can't succeed into waiting an sql query result

This is what my Code looks like

socket.on('new', async function(information) {
  console.log("check no offer en cours");
  var checkOffer = "SELECT COUNT(*) as total FROM app__offer WHERE status_id = 1 AND profile_id = " + user.idUser;
  doInsert = false;
  con.query(checkOffer, function(err, result) {
    if (err) throw err;
    console.log(result[0].total);
    if (result[0].total == 0) {
      console.log("can insert");
      doInsert = true;
    }
  }).then(function() {
    console.log(doInsert);
    if (doInsert) {
      console.log("create offer");
      var sql = "INSERT INTO app__offer (createdAt,updatedAt, startAt, programmed, startLatitude, startLongitude, commune_id, point_id, status_id,device,profile_id) " +
        "VALUES ('" + todayDateTime + "','" + todayDateTime + "','" + todayDateTime + "'," + false + "," + user.latitude + "," + user.longitude + "," + user.idCommuneDestination + "," + user.idPoint + "," + 1 + "," + 'device' + "," + user.idUser + ")";
      console.log(sql);
      con.query(sql, function(err, result) {
        if (err) throw err;
        socket.emit('new', result);
      });
    } else {
      console.log("Cet user a déjà une offre en cours");
    }
  });

Issue is the doInsert Log is executed before the canInsert Log.

Upvotes: 0

Views: 136

Answers (2)

Garry
Garry

Reputation: 534

I would do like :-

try{
  let result = await con.query(checkOffer);
    if (result) {
      let resultFromAnotherQuery = await con.query(sql);
      if (resultFromAnotherQuery){
        console.log("done");
      }
    }
}catch(err) {
   console.log(err);
}

Upvotes: 1

Andrea Franchini
Andrea Franchini

Reputation: 576

I think that con.query() accept the callback and is also "thennable" returning a Promise.

In most cases if the callback is provided, that will be the handler of the result and it wont be passed to the Promise.

So

con.query(query, () => {
    // this code is executed when the query ends
}).then(() => {
    // this code is executed when the promise attached to .then() is resolved
    // in this case con.query() is instant resolved cause a callback parameter is given
})

The solution is to put all in the callback OR all in the promise chain.

Upvotes: 1

Related Questions