我正在做一个项目,它有一个简单的 Jmeter 板,在我的服务器上,我建立了三个mySql连接,并获得一些信息,如**(用户、管理员、事件)**,这些信息将显示在 Jmeter 板上,我使用以下代码收集信息:
function gather_info(callback) {
let info = {
users: [],
admins: [],
events: []
}
sql.query("SELECT * FROM users", (err, users) => { info.users = users });
sql.query("SELECT * FROM users WHERE isAdmin = 1", (err, admins) => { info.admins = admins });
sql.query("SELECT * FROM events", (err, events) => { info.events = events });
callback(info);
}
然后我在get请求中使用上面的函数:
app.get("/", loginRequired, (req, res, next) => {
//check if user is admin - to render dashboard
if (req.user.isAdmin) {
gather_info((info) => {
return res.render('admin', { events: info.events, users: info.users, admins: users.admins })
})
};
//if user not admin render users page
sql.query("select * from events where userId = ?", [req.user.ID], (err, events) => {
res.render("index", { events });
});
})
- 现在的问题是函数不工作正确,我尝试使用async/await但mysql不这样工作,我现在该怎么办?
- 另一个问题是,在使用createPool时,每次打开连接时是否都应该关闭连接?
-谢谢你的好意
2条答案
按热度按时间zpgglvta1#
您可以使用
Promise.all
来优化gather_info
方法。您可以进一步在
Promise.all
的catch块中添加验证,还可以解析和验证结果数组。Promise.all
将并行运行这些查询,这样您就不必等待一个查询完成后再开始另一个查询。这样,由于这些查询看起来是独立的,因此速度会更快。除此之外,您还可以使用
async await
重构app.get
以使代码始终相似,因为您可以很容易地理解它,所以我没有涉及它。fhg3lkii2#
至少有3种方法可以做到这一点。
1.嵌套调用,最有可能是最糟糕的!!