@jackweb: To działa, jednak nadal nie do końca tak jak chcę. Głównie zależy mi na tym, żebym miał funkcję, która zwróci odpowiedź z bazy danych i podstawi to pod jakąś zmienną.
Tak mniej więcej działa ta moja stronka:
app.get('/wpis/:id', function (req, res) {
con.query("SELECT ID, userID, tytul, tresc FROM wpisy WHERE ID='" + req.params.id + "'", function (err, result, fields) {
con.query("SELECT ID, komentarzID, userID, tresc FROM komentarze WHERE wpisID='" + req.params.id + "'", function (err2, result2, fields2) {
var wpis = {ID: result[0].ID, tytul: result[0].tytul, tresc: result[0].tresc};
var komentarz = [];
for(i=0;i<result2.length;i++)
{
komentarz[i] = {komentarzUserID: result2[i].userID, komentarzTresc: result2[i].tresc};
}
res.render('wpisPage', {wpis: wpis, komentarz: komentarz});
});
});
});
Chiiałbym oprócz podawania ID użytkownika przesłać jego nick, avatar i inne dane.
W tabeli "Komentarze" przechowuje tylko ID użytkownika, który dany komentarz zamieścił. Potrzebuje wyciągnąć jego nick z tabeli "users" i tu właśnie pojawia się ten problem.
Nawet jeżeli użyje tego Promis'a to i tak nie wiem jak go użyć, żeby działał pod pętlą for dla pobrania kilku użytkowników.
Jeśli zrobię tak to niestety nadal przy res.render jest undefined
var nick[];
for(i=0;i<result2.length;i++)
{
getUserNick(i).then(result => {
console.log("Got the result!!!");
console.log(result);
nick[i] = result;
}).catch(error => {
console.log("Ooopss");
console.error(error);
});
}
console.log(nick[0]); //UNDEFINED
res.render('wpisPage', {nick: nick}); //UNDEFINED
A nie mogę władować res.render wewnątrz tego wszystkiego, bo to ma się raz na końcu wykonać.
Robienie con.query w pętli równiez nie przynosi efektów:
var nick[];
for(i=0; i<result2.length; i++)
{
con.query("SELECT ID, nick FROM users WHERE ID='" + i + "'", (err, result, fields) => {
nick[i] = result[0].nick;
});
}
console.log(nick); //UNDEFINED
res.render('wpisPage', {nick: nick}); //UNDEFINED
Próbowałem już dziesiątki sposobów, ale dalej nie znalazłem skutecznego rozwiązania (jedynie to z czekaniem setTimeout(), ale to bez sensu).