我有一个 node .js/Express应用程序,查询路由中的MySQL数据库,并向用户显示结果.我的问题是,在将用户重定向到他们请求的页面之前,如何运行查询并阻止,直到两个查询都完成?
在我的示例中,我有两个查询需要在呈现页面之前完成.如果我将查询2嵌套在查询1的"result"回调中,我可以让查询同步运行.然而,当查询数量增加时,这将变得非常复杂.
如何同步运行多个(在本例中为2)数据库查询,而不将后续查询嵌套在前一个查询的"result"回调中?
我已经研究了 node 模块中的"流控制/异步功能",并try 了Flow js,但我无法让它用于异步查询.
下面列出了我试图从"/home"路径执行的两个查询. node 专家能否解释一下这样做的"正确"方法.
app.get('/home', function (req,res) {
var user_array = [];
var title_array = [];
// first query
var sql = 'select user_name from users';
db.execute(sql)
.addListener('row', function(r) {
user_array.push( { user_name: r.user_name } );
})
.addListener('result', function(r) {
req.session.user_array = user_array;
});
// second query
var sql = 'select title from code_samples';
db.execute(sql)
.addListener('row', function(r) {
title_array.push( { title: r.title } );
})
.addListener('result', function(r) {
req.session.title_array = title_array;
});
// because the queries are async no data is returned to the user
res.render('home.ejs', {layout: false, locals: { user_name: user_array, title: title_array }});
});