Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2016, 01:23
Аспирант
Отправить личное сообщение для Elect Посмотреть профиль Найти все сообщения от Elect
 
Регистрация: 06.09.2015
Сообщений: 41

Непонятная аномалия
Доброй ночи.
Возникла непонятная аномалия.
Следующая функция возвращает пустой массив,хотя я уверен,что результат sql-запроса не пустой,если делать лог внутри цикла,то там всё есть,но в массив видимо не ходит пизаться.
var getList = function(){
    var list = [];
    connection.query("SELECT * FROM list",function(err, result){
        for(var i in result){
            list.push(result[i]);
        }
    });
    return list;
}
Ответить с цитированием
  #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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная пробелема со скриптом ExXxTaSy Общие вопросы Javascript 0 09.04.2015 17:28
Непонятная работа скрипта joejoker jQuery 2 20.07.2012 19:51
Непонятная ошибка yuri-it jQuery 0 10.06.2011 10:34
Непонятная ошибка в IE6 Servest Internet Explorer 14 10.10.2010 13:19
Непонятная кодировка при encodeURIComponent() Vulkan AJAX и COMET 27 29.06.2010 21:27