Показать сообщение отдельно
  #2 (permalink)  
Старый 01.08.2016, 07:25
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Потому что асинхронщина.

Цитата:
в массив видимо не ходит пизаться
С какой бы стати ему не писаться? Просто ты возвращаешь 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
Ответить с цитированием