mysql - 不要等待mysql数据库导致节点js
问题描述
我尝试使用 mysql 数据库查询从被调用函数中获取结果,但不等待被调用函数中的结果。以下是我的 users.js 文件代码。我在getBankDetail函数中得到了结果,但在users函数中没有得到结果。
var db = require("../db/mysqlconnection");
function users(app){
app.get("/users",async function(req, res, next){
let bankDetail = await getBankDetail();
console.log("bankDetail",bankDetail); //Here I do not got result
return res.send(bankDetail);
});
}
async function getBankDetail(){
db.getConnection(async function(err, connection) {
if (err) throw err; // not connected!
await connection.query('SELECT * FROM bank', function (error, results, fields) {
connection.release();
if (error) throw error;
console.log("bank result",results); //Here I got result
return results;
});
});
}
module.exports = users;
我的问题是为什么不等待调用函数的结果?我还使用了异步/等待功能。
解决方案
function getBankDetail(){
return new Promise((resolve, reject) => {
db.getConnection(function(err, connection) {
if (err) reject(err); // not connected!
connection.query('SELECT * FROM bank', function (error, results, fields) {
connection.release();
if (error) reject(err);
console.log("bank result",results); //Here I got result
resolve(results);
});
});
});
}
然后你可以使用let bankDetail = await getBankDetail();
如果你想在你的上使用 await ,db.getConnection
你connection.query
将不得不使用mysql2/promises库或自己承诺这些功能
这是您使用数据库驱动程序的承诺版本时的实现:
async function getBankDetail(){
const connection = await db.getConnection();
const data = await connection.query('SELECT * FROM bank');
connection.release();
console.log("bank result", data[0]); //Here I got result
return data[0];
}
推荐阅读
- ruby-on-rails - 运行 rails test 会创建两个新数据库 [已解决]
- python - win32api - ImportError: DLL load failed: 找不到指定的模块
- reactjs - 如何处理功能组件中的派生状态?
- git - Git LFS - 文件大小呈指数增长
- python - 测试 C 对象设置器/获取器
- amazon-web-services - Cloudwatch 事件未触发通过 CloudFormation 创建的 Lambda 函数
- sessionid - 会话管理:会话 ID 熵不足
- python - 如何知道 Python 子进程 Popen 并行运行的开始时间/结束时间
- google-api - 如何使用谷歌 API 为 1 小时购物提要生成刷新/访问令牌
- reactive-mongo-java - 使用reactivemongotemplate更新Mongo中的多级嵌入式文档