Search code examples
javascriptnode.jspromisenode-mysql

using Promise api with Node Mysql not working


I am able to run sql query and fetch records from MySql database using the following code

var mySql = require("mysql");

var connection = mySql.createConnection({
  host : "localhost",
  user : "root",
  password : "rahul",
  database : "testDb" //schema
});

connection.connect();

connection.query("select * from departmentTbl",function(err,rows,fields){

  if(err){
    console.log(err.stack);
  }

  for(var i = 0; i < rows.length; i++){     
    console.log("DepartmentId : \'"+rows[i]["deptId"]+"\', DepartmentName \'"+rows[i]["deptName"]+"\'");
  }
});

connection.end();

But I am not able to run the code if I use A+ Promise api A+ Promise API

As shown below,

var Promise = require("promise");

var mySql = require("mysql");

var connection = mySql.createConnection({
  host : "localhost",
  user : "root",
  password : "rahul",
  database : "testDb" //schema
});

var p  = Promise.resolve(connection.connect());


var sqlQuery = p.then(function(con){
  return Promise.resolve(con.query);
});

sqlQuery.then(function(q){

 q("select * from departmentTbl").then(function(err,row,fields){
   if(err){
    console.log(err.stack);
   }

   for(var i = 0; i < rows.length; i++){        
    console.log("DepartmentId : \'"+rows[i]["deptId"]+"\', DepartmentName \'"+rows[i]["deptName"]+"\'");
   };

  }).done(function(){
    connection.end();   
 });
});

Please tell me where I am going wrong, Why I am not able to resolve the Promise.

My code doesn't even throws error


Solution

  • I am able to solve it the mysql Node and PromiseJS using below implementation as follows,

     var Promise = require("promise");
    
     var mySql = require("mysql");
    
        var connection = mySql.createConnection({
        host : "localhost",
        user : "root",
        password : "rahul",
        database : "testDb" //schema
    });
    
    connection.connect();
    
    var getDepartments = function(){
      return new Promise(function(resolve,reject){
        connection.query("select * from departmentTbl",function(err,rows,fields){
    
            if(err){                
                return reject(err);
            }else{              
                return resolve(rows);
            }
    
        }); // query
      }); // Promise
    } // getDepartments
    
    getDepartments().then(function(rows){   
      for(var i = 0; i < rows.length; i++){     
        console.log("DepartmentId : \'"+rows[i]["deptId"]+"\', DepartmentName \'"+rows[i]["deptName"]+"\'");
      } 
    }).catch(function(e){
      console.log(e.stack);
    });
    
    connection.end();