Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.07.2016, 07:55
Новичок на форуме
Отправить личное сообщение для thevalakas Посмотреть профиль Найти все сообщения от thevalakas
 
Регистрация: 29.07.2016
Сообщений: 7

Функция не возвращает true/false
Здравствуйте, вот код:
var io = require('socket.io').listen(8080);
var sql = require('mysql');

function sqlstart() {
    var sqlcon = sql.createConnection({
        host: 'localhost',
        user: 'socket',
        password: 'socket',
        database: 'socket'
    });

    return sqlcon;
}

function isauth(value) {
    var sqlcon = sqlstart();
    sqlcon.connect();
    sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) {
        if(err) throw err;
        if(rows.length>0) {
            return true;
        }else{
            return false;
        }
    });
    sqlcon.end();
}

io.set('log level', 1);

io.sockets.on('connection', function (socket) {
    var ID = (socket.id).toString().substr(0, 5);

    socket.json.send({'event': 'connect', 'name': ID});

    socket.on('message', function (msn) {

        if(msn.event === "auth") {
            if(isauth(msn.sess)) {
                socket.json.send({'event': 'authSuccess'});
            }else{
                socket.json.send({'event': 'authError', 'param': 'wrong sess'});
            }
        }

    });

});


Функция isauth возвращает undefined хотя должна true/false.

function isauth(value) {
    var sqlcon = sqlstart();
    sqlcon.connect();
    sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) {
        if(err) throw err;
        if(rows.length>0) {
            return true;
        }else{
            return false;
        }
    });
    sqlcon.end();
}


Подскажите что не так.

Последний раз редактировалось thevalakas, 29.07.2016 в 08:01.
Ответить с цитированием
  #2 (permalink)  
Старый 29.07.2016, 08:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

thevalakas,
нужно обёртку сделать для асинхронного функционала. https://learn.javascript.ru/promise#промисификация. То есть что-то типа
function isauth(value) {
	return new Promise((resolve, reject) => {
	    var sqlcon = sqlstart();
		sqlcon.connect();
		sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) {
			if(err) reject(err);
			if(rows.length>0) {
				resolve(true)
			}else{
				resolve(false)
			}
		});
		sqlcon.end();	
	})
}


и где-то в коде вызывать так
isauth('blablabla').then(response => alert(response), err => console.error(err))
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2016, 15:01
Новичок на форуме
Отправить личное сообщение для thevalakas Посмотреть профиль Найти все сообщения от thevalakas
 
Регистрация: 29.07.2016
Сообщений: 7

Спасибо
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JavaScript: функция возвращает undefined. Подскажите где я туплю fluffyMan2000 Общие вопросы Javascript 15 14.11.2013 11:21
что возвращает функция wrap? zebra741258963 jQuery 3 09.04.2012 07:35
функция проверки форм не возвращает false voodoo Общие вопросы Javascript 6 27.06.2011 13:14
оператор return возвращает значение, а не ссылку. Vertuplatonium Общие вопросы Javascript 4 16.05.2011 14:02
Функция не возвращает false, почему? Vitaly jQuery 3 05.07.2009 16:05