Wpis z mikrobloga

@Ponvrak: Dobra, to tak... Promise to takie coś, co może zwrócić wynik albo może zwrócić wyjątek(wykopyrtnąć się). W Twoim przypadku Promise zwracany jest w database.query(). Funkcja query zwraca obiekt Promise, w którym coś się pojawi.

Masz dwie opcje czekania na rozwiązanie się promise.
1. to callback, tak jak Ci tu chłopaki proponują. Czyli zaraz za tym jak się rozwiąże promise(wyjątek lub wynik), to wykonaj to co jest w callbacku, w tej funkcji przekazywanej dalej.
2. polega na tym, że czekasz na rozwiązanie Twojego Promise, jeżeli chcesz na to zaczekać to każda funkcja, która ma awaita musi być oznaczona jako asynchroniczna. U Ciebie wyglądało by to tak:

https://pastebin.com/SmYCVu3g

Jaśniej? Jeżeli masz pytania to pytaj o konkretne linie. Najdziwniejsze z tego podejrzewam, że może być dla Ciebie to
(async function(){})()
Wszystko rozbija się o to, że awaita możesz użyć tylko w async więc dodałem sobie samowywołującą się funkcję asynchroniczną by ten wymóg zaspokoić. Pełni ona rolę takiego mojego javowego Main()
  • 4
@itdrwal: no niestety nie działa, to co Ty przedstawiłeś to dużo ładniej i krócej rozpisane rozwiązanie do którego sam doszedłem. Podejrzewam ze problem leży w funkcji query, która zdaje się nie zwracać wartości, można ją jedynie wyświetlić console.logiem wewnątrz jej samej. Metoda connection.query (u mnie nazwana database.query, co nie ma znaczenia) jest częścią pakietu npm „mysql”, w jej dokumentacji w ogóle nie jest poruszona kwestia „wydobywania” danych z bazy danych w
Tyle udało mi się zrobić, działa, jednak tylko i wyłącznie wewnątrz metody getDataFromDatabase:

function getDataFromDatabase(callback) {
let sql = 'SELECT * FROM users WHERE id = 1';
database.query(sql, function (err, result) {
if (err) callback(err, null);
let user = result[0];
callback(null, user);
});
}

getDataFromDatabase(function (err, user) {
if (err) throw err;
var x = user;
console.log(x);
//x daje poprawny wynik, jednakże na x można wykonywa operacje wyłącznie wewnątrz tej metody, nie