Tuesday, 9 May 2017

NodeJS/MySQL/Promises Troubles

I'm quite new to NodeJS and JS globally and I'm in trouble while setting and Object Property through a MySQL query.

I'm using Promise to avoid bad asynchronous effect but apparently I'm doing it wrong, the property of my Agent Obejct is never updated.

Here is the code :

class Agent {
  constructor(agentId, agentName, agentCountry) {
    this.agentId = agentId;
    this.agentName = agentName;
    this.agentCountry = agentCountry;
  }

  setAgentCountry () {

    var promise = function(agentID) {
      return new Promise(function(resolve, reject) {
      var query = "SELECT c.CountryID, c.CountryName FROM AgentCountry ac, Country c WHERE ac.AgentID = '" + agentID + "' AND ac.CountryID = c.CountryID";
      connection.query(query, function(err, results) {
        if (!err) {
          resolve(results);
        } else {
          console.log('Error while performing Query.');
        }
      });    
     });
    }

    promise(this.agentID).then(function(data) {
        var string = JSON.stringify(data);
        var json =  JSON.parse(string);

        //the agent property is never updated !!
        this.agentCountry = json;
    }.bind(this), function(err) {
      console.log(err);
    });
  }

}

I call the method this way :

var agent = new Agent(1,"John Doe", "France");
console.log(agent.agentCountry); //Displays "France"

agent.setAgentCountry();
console.log(agent.agentCountry); //Did not display the table of countries it should

Could you help me with this ?

Thanks



via Benoit Duprat

No comments:

Post a Comment