Как присвоить значение глобальной переменной из метода connection.query в node.js?

Доброй ночи!
Есть проблема.

Вот такая штука (серверный скрипт NODE.JS, все модули подключены, связь с БД установлена, переменные логина и пароля также присвоены) :
var user_connected = 0;
io.sockets.on('connection', function (socket) {
    socket.on('message', function (token) {
if (ЗДЕСЬ TRUE){
    connection.connect();
    connection.query("SELECT COUNT(*) AS idCount FROM users WHERE user_id ='"+user_id+"' AND password = '"+user_password+"' LIMIT 1", function(err, results) {
  if (err){throw err;}
 if (results[0].idCount > 0){
user_connected = 1;
}
});
    connection.end();
}
});
    socket.json.send({'event': 'messageSent', 'quest': user_connected});
});


В переменной results[0].idCount находится значение 1, которое присваивается переменной user_connected. Однако вне метода connection.query значение переменной user_connected "испаряется" и возвращается начальное: 0.

Вопрос: как быть в подобной ситуации, если мне нужно получить значение этой переменной вне метода? Вроде бы все правильно делаю, однако безрезультатно.

P.S. Может, я употребляю не то определение, и connection.query не является методом.

UPD: Судя по моей проверке, ошибка возникает не из-за какой-нибудь асинхронности, т.к. в таком случае значение переменной user_connected все равно не должно теряться в областях значения переменной.

UPD2: Все-таки есть подозрение, что проблема как раз в том, что присвоение значения переменной происходит после вывода, однако, если поставить console.log(), то видно по логу, что как только метод запроса к БД завершается - присвоенное в нем [методе] значение user_connected куда-то исчезает.
  • Вопрос задан
  • 3997 просмотров
Решения вопроса 1
Чтобы присвоить значение глобальной переменной изнутри функции-колбэка, нужно сначала объявить эту переменную вне функции, затем уже внутри функции присвоить ей нужное значение. Если с этим у Вас возникают трудности, Вам следует сначала почитать об областях видимости в js и об асинхронности. А так же научится дебажить код не только с помощью console.log().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы