javascript - 如何在 Java Script 中处理函数调用的异步性质
问题描述
我正在创建一个函数,它将返回数据库查询的结果。问题是当我调用主函数时,主函数(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);
解决方案
因为dbConnect.query()
使用回调模式来处理查询结果,所以这个回调模式阻止你直接将查询结果作为你的函数返回值。
为了解决这个问题,Promise出来解决回调金字塔。
1) 更改getSessionCode()
为返回 Promise
2) 使用then()
orawait
模式使用 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);
推荐阅读
- python - 带有日志记录的 Python Windows 计划
- python - 如何使用 BeautifulSoup 和 headers 避免 403 问题?
- python - 排序功能不会对用户输入的列表进行排序
- java - 从java中的if语句(具有多个AND类型的条件)中查找失败的条件
- javascript - 允许不和谐机器人访问直接消息讨论的消息数据
- intellij-idea - intellij 2020.1 sbt mainRunner 配置
- android - Android NDK 构建的库在设备上崩溃,但在模拟器中运行良好
- google-apps-script - 如何从工作表中获取数据到我的下拉框
- function - 在主页小部件上方找不到 coorect 提供程序
- javascript - NODE.js 和 ORACLE,dbObject 的问题