Я новичок в 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, поэтому стараюсь думать об этом с точки зрения потоков. Допустим, оба обещания были отклонены, и я хотел отобразить страницу с обоими ошибками. Как мне составить список сообщений об ошибках, которые будут отображаться? Похоже ли это на потоки, где оба обещания могут быть отклонены одновременно, а попытка составить список ошибок небезопасна? Как бы вы сделали его безопасным для потоков?
заранее спасибо за ваши комментарии !!