У меня есть приложение Node.js/Express, которое запрашивает MySQL db в маршруте и отображает результат для пользователя. Моя проблема заключается в том, как выполнять запросы и блокировать до тех пор, пока оба запроса не будут выполнены до перенаправления пользователя на запрашиваемую страницу?
В моем примере у меня есть 2 вопроса, которые нужно закончить, прежде чем я создам страницу. Я могу заставить запросы запускать синхронно, если я вставляю запрос 2 внутри обратного вызова запроса "результат" 1. Это, однако, станет очень запутанным, когда число запросов увеличивается.
Как мне выполнить одновременное выполнение нескольких запросов в базе данных (в этом случае 2), не вложив последующий запрос в обратный вызов "результат" предыдущего запроса?
Я посмотрел на "Управление потоком/асинхронные свойства" в модулях Node и попытался использовать stream-js, но я не могу заставить его работать с асинхронными запросами.
Ниже перечислены 2 запроса, которые я пытаюсь выполнить с маршрута "/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 }});
});