Потому что асинхронщина.
Цитата:
|
в массив видимо не ходит пизаться
|
С какой бы стати ему не писаться? Просто ты возвращаешь list еще
до того, как придет ответ от сервера. Как думаешь, почему в query нужно передавать коллбек, вместо того, чтобы напрямую получить результат? Запрос к базе данных - это запрос к сторонней программе, иногда даже на стороннем сервере, и еще неизвестно, когда от нее придет ответ (и придет ли вообще), поэтому нода поступает так - шлет запрос, записывает коллбек, который выполнится при ответе, и продолжает исполняться дальше. В твоем случае посылает запрос SELECT * FROM list и сразу же возвращает массив list, который на тот момент, естественно, пустой.
Изучай обещания -
https://learn.javascript.ru/promise.
function getList() {
return new Promise((resolve, reject) => {
connection.query("SELECT * FROM list", (err, rows) => {
resolve(rows);
});
});
}
// где-то в другом месте
getList().then((list) => {
console.log(list);
});
Ну и да, если уж ты все равно на ноде - почему не используешь ES6?
https://learn.javascript.ru/es-modern