Как ввести данные из нескольких асинхронных вызовов в шаблон мопса в Node? - PullRequest
0 голосов
/ 08 марта 2019

Я новичок в Node и в понятиях обещаний, поэтому я пытаюсь понять, когда будет вызван код.

То, что я пытаюсь сделать, это получить несколько различных фрагментов данных из базы данных, а затем обработать их с помощью pug.

Если бы у меня был код, подобный следующему, когда будут вызываться различные биты кода, и достигнет ли он того, чего я хочу?

(извинения за любые опечатки, это не скомпилированный код)

function getData1(con) {
    return new Promise(function (resolve, reject) {
        con.query('Select * from Table1', function(err, result) {
            if (err) reject(err);
            else resolve(result);
        })      
    })
}


function getData2(con) {
    return new Promise(function (resolve, reject) {
        con.query('Select * from Table2', function(err, result) {
            if (err) reject(err);
            else resolve(result);
        })      
    })
}

app.get('/', (req, res) => {

    const mysql = require('mysql');
    const con = mysql.createConnection({blah blah blah
    });

con.connect((err) => {
    if (err) throw err;
    console.log('Connected!');
});

var data1;
var getData1 = getData1(con);
getData1.then(function(result) {
    data1 = result;
})

var data2;
var getData2 = getData2(con);
getData2.then(function(result) {
    data2 = result;
})

res.render('index', { data1: data1,
            data2 : data2});

Полагаю, я более конкретно спрашиваю:

1) Блокируют ли getData1.then () и getData2 () или они ведут себя как обработчик событий, который вызывается при разрешении обещания?

2) Исходя из этого, res.render () будет вызываться только тогда, когда у нас есть значения для data1 и data2, или это необходимо сделать в функции then ()?

3) Если это должно быть в функциях then, каков хороший способ справиться с этим, учитывая, что у меня есть два обещания ждать?

4) Все примеры использования модуля mysql, которые я видел, не содержат обещаний. Поскольку получение соединения асинхронно (?), Разве не возможно, что я пытаюсь использовать соединение до того, как оно у меня будет?

5) Я из Java, поэтому стараюсь думать об этом с точки зрения потоков. Допустим, оба обещания были отклонены, и я хотел отобразить страницу с обоими ошибками. Как мне составить список сообщений об ошибках, которые будут отображаться? Похоже ли это на потоки, где оба обещания могут быть отклонены одновременно, а попытка составить список ошибок небезопасна? Как бы вы сделали его безопасным для потоков?

заранее спасибо за ваши комментарии !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...