Как запустить два запроса в Node и передать их в функцию рендера? - PullRequest
0 голосов
/ 21 октября 2018

Я хочу выполнить два запроса и, когда они закончат, передать данные в res.render.Я читал об обещаниях, но до сих пор не понимаю, как заставить второй запрос передавать данные и помещать их в рендер.По сути, я хотел бы запустить функцию / обещание queryTable дважды, но второй раз с thegraphquery.

app.get('/clickus', function(req, res) {
    var thequery = 'SELECT ab FROM table';
    var thegraphquery = `select cd FROM table `;

    let promise = queryTable(thequery);
    promise.then(
        data => res.render('clickus', {
            'mydata': data
        })
    );
});

function queryTable(thequery) {
    return new Promise(function(resolve, reject) {
        var con = new msSqlConnecter.msSqlConnecter(config);
        con.connect().then(function() {
            new con.Request(thequery).onComplate(function(count, datas) {
                resolve(datas);
            }).onError(function(err) {
                console.log(err);
            }).Run();
        }).catch(function(ex) {
            console.log(ex);
        });
    });
}

Ответы [ 2 ]

0 голосов
/ 21 октября 2018

const createPromise = (time) => new Promise((resolve, reject) => {
  setTimeout(() => resolve(time), time);
});

Promise.all([createPromise(1000), createPromise(2000)])
 .then((result) => console.log(result))

Вы можете использовать Promise.all api Promise.all

Promise.all принимает массивобещания, а затем только пожары, когда все обещания решены.Затем в Promise.all вы принимаете массив результатов для каждого обещания.

 app.get('/clickus', function(req, res) {
    var thequery = 'SELECT ab FROM table';
    var thegraphquery = `select cd FROM table `;

    Promise.all([queryTable(thequery), queryTable(thegraphquery)])
     .then(
        data => res.render('clickus', {
                    'mydata': data // an array of data ['thequery result', 'thegraphquery result']
                })
    );

});
0 голосов
/ 21 октября 2018

Используйте Promise.all, чтобы выполнить оба запроса одновременно и дождаться обоих результатов, прежде чем передавать их на res.render:

app.get('/clickus', function(req, res) {
    var thequery = 'SELECT ab FROM table';
    var thegraphquery = `select cd FROM table `;

    Promise.all([queryTable(thequery), queryTable(thegraphquery)])
        .then(results => {
           res.render('clickus', {
               'queryData': results[0],
               'graphQueryData': results[1]
           });
        });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...