我正在创建一个函数,该函数将向我返回数据库查询的结果。问题是当我调用主函数时,主函数(getSessionCode)中的查询函数没有首先执行。 我尝试了Promise管理器方法以及回调,但这些方法似乎都不起作用。
代码:
dbConnectionObject = require('./DatabaseHandler.js');
dbConnect = dbConnectionObject.getdatabaseConnection();
var sessioncode;
function getSessionCode(emailaddress){
var queryBuild = "select <column name> from <table_name> where email="+ "\'"+ emailaddress +"\'";
var responseArray;
dbConnect.query(queryBuild,(err, res) =>{
if(err)
{
console.log(err);
}
else if(res){
responseArray=res.rows;`enter code here`
dbConnect.end();
console.log(responseArray);
return responseArray;
}
});
}
sessioncode = getSessionCode('gautam.pruthi@abc.com');
console.log(sessioncode);
答案 0 :(得分:0)
由于dbConnect.query()
使用回调模式来处理查询结果,因此该回调模式会阻止您直接将查询结果作为函数的返回值。
为解决此问题,Promise出来解决回调金字塔。
1)更改getSessionCode()
以返回承诺
2)使用then()
或await
模式消耗Promise最终值
dbConnectionObject = require('./DatabaseHandler.js');
dbConnect = dbConnectionObject.getdatabaseConnection();
var sessioncode;
function getSessionCode(emailaddress) {
var queryBuild = "select <column name> from <table_name> where email=" + "\'" + emailaddress + "\'";
var responseArray;
return new Promise(function(resove, reject){
dbConnect.query(queryBuild, (err, res) => {
if (err) {
console.log(err);
reject(err);
} else if (res) {
responseArray = res.rows;
`enter code here`
dbConnect.end();
console.log(responseArray);
resove(responseArray);
}
});
});
}
sessioncode = getSessionCode('gautam.pruthi@abc.com');
sessioncode.then((session)=>{
console.log(session);
})
sessioncode = await getSessionCode('gautam.pruthi@abc.com');
console.log(sessioncode);