Javascript 在节点Mysql不工作的情况下使用Promise api

Javascript 在节点Mysql不工作的情况下使用Promise api,javascript,node.js,promise,node-mysql,Javascript,Node.js,Promise,Node Mysql,我能够使用以下代码运行sql查询并从MySql数据库中获取记录 var mySql = require("mysql"); var connection = mySql.createConnection({ host : "localhost", user : "root", password : "rahul", database : "testDb" //schema }); connection.connect(); connection.query("select

我能够使用以下代码运行sql查询并从MySql数据库中获取记录

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();
var mySql=require(“mySql”);
var connection=mySql.createConnection({
主机:“本地主机”,
用户:“根”,
密码:“rahul”,
数据库:“testDb”//schema
});
connection.connect();
connection.query(“select*from departmentTbl”,函数(err、行、字段){
如果(错误){
console.log(err.stack);
}
对于(var i=0;i
但是如果我使用+Promise api,我就无法运行代码

如下图所示

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();   
 });
});
var承诺=要求(“承诺”);
var mySql=require(“mySql”);
var connection=mySql.createConnection({
主机:“本地主机”,
用户:“根”,
密码:“rahul”,
数据库:“testDb”//schema
});
var p=Promise.resolve(connection.connect());
var sqlQuery=p.then(函数(con){
返回承诺。解析(con.query);
});
sqlQuery.then(函数(q){
q(“从部门TBL中选择*)。然后(函数(错误、行、字段){
如果(错误){
console.log(err.stack);
}
对于(var i=0;i
请告诉我哪里出了问题,为什么我不能解决承诺


我的代码甚至没有抛出错误

我可以通过mysql节点和PromiseJS使用以下实现来解决它,如下所示

 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();
var承诺=要求(“承诺”);
var mySql=require(“mySql”);
var connection=mySql.createConnection({
主机:“本地主机”,
用户:“根”,
密码:“rahul”,
数据库:“testDb”//schema
});
connection.connect();
var getDepartments=function(){
返回新承诺(功能(解决、拒绝){
connection.query(“select*from departmentTbl”,函数(err、行、字段){
如果(错误){
退货拒绝(err);
}否则{
返回解析(行);
}
});//查询
})承诺
}//获取部门
getDepartments().then(函数(行){
对于(var i=0;i
我可以使用下面的实现解决mysql节点和PromiseJS的问题,如下所示:

 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();
var承诺=要求(“承诺”);
var mySql=require(“mySql”);
var connection=mySql.createConnection({
主机:“本地主机”,
用户:“根”,
密码:“rahul”,
数据库:“testDb”//schema
});
connection.connect();
var getDepartments=function(){
返回新承诺(功能(解决、拒绝){
connection.query(“select*from departmentTbl”,函数(err、行、字段){
如果(错误){
退货拒绝(err);
}否则{
返回解析(行);
}
});//查询
})承诺
}//获取部门
getDepartments().then(函数(行){
对于(var i=0;i
我认为您的承诺处理程序的函数签名不正确。它不应包括
err
。您应该传递第二个处理程序(拒绝处理程序),该处理程序接受gets err参数,或者链接一个
.catch()
方法。我可以解决它,请检查。谢谢。我认为您的承诺处理程序的函数签名不正确。它不应包括
err
。您应该传递第二个处理程序(拒绝处理程序),该处理程序接受gets err参数,或者链接一个
.catch()
方法。我可以解决它,请检查。谢谢