@rodionov12

Как передать параметр переменной внутри функциии?

io.sockets.on('connection', function (socket) {
    socket.on('show', function (data) {
        var tmp = {};
        connection.query('SELECT * FROM `name` WHERE `id` = ? LIMIT 1', data, function(err, result) {
            tmp.names = result[0];
            console.log(tmp.names);
        });
        console.log(tmp);
    });
});

Вот кусочек моего кода. Необходимо сделать выборку из БД, затем передать все данные в переменную tmp.result. После запуска данного кода ничего не добавляется. Значения из БД дёргаются, внутри функции выводится, а снаружи - пусто. Пробовал tmp.names = {} после объявления tmp, но результат тот же. Причём сначала в консоль выводится пустой объект tmp, а затем уже созданный tmp.names, хотя по коду вывод tmp находится ниже
Как мне грамотно передать tmp.names из этой функции?
  • Вопрос задан
  • 305 просмотров
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
Дело в том, что Вы путаете синхронные и асинхронные функции. Асинхронные выполняются не сразу, потому результат они не возвращают, а вызывают коллбэк. Вот в коллбэке и нужно что-нибудь делать с полученным значением. По сути, ваш код будет выполнен в таком порядке:
1. var tmp = {};
2. Начинает работать connection.query
3. console.log(tmp);
(Через некоторое время)
4. connection.query заканчивает свою работу и вызывает вашу безымянную функцию function(err, result){ ... }
5. tmp.names = result[0];
6. console.log(tmp.names);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@PyTiMa
Учусь, кручусь, верчусь.
Сударь, да вы забыли про асинхронность ноды.. Про главную фишку того, на чем вы пишете приложение.
Как говорили раньше: "Либо Путь самурая, либо Путь домохозяйки"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы