У меня есть приложение 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 }});
});