Нодеи выражают и обещают не делать то, что я ожидаю

Я пытаюсь создать API входа в систему, используя NodeJS, но мой код не выполняет то, что я ожидаю. Я очень новичок в JS, обещания и все такое, поэтому, пожалуйста, упростите любой ответ, если это возможно.

Из того, что я вижу в выводе моего кода, первая часть обещания не ждет, пока функцияfindUsers(...) закончен.

У меня есть файл маршрутов, где я хочу запустить несколько функций последовательно:

Найти, если пользователь существует в базе данныхif (1 true) хешировать и вводить введенный пароль... так далее

Файл маршрутов теперь содержит:

var loginM = require('../models/login');
var loginC = require('../controllers/login');
var Promise = require('promise');

module.exports = function(app) {

    app.post('/login/', function(req, res, next) {

        var promise = new Promise(function (resolve, reject) {
            var rows = loginM.findUser(req.body, res);

            if (rows.length > 0) {
                console.log("Success");
                resolve(rows);
            } else {
                console.log("Failed");
                reject(reason);
            }
        });

        promise.then(function(data) {
            return new Promise(function (resolve, reject) {
                loginC.doSomething(data);

                if (success) {
                    console.log("Success 2");
                    resolve(data);
                } else {
                    console.log("Failed 2");
                    reject(reason);
                }
            });
        }, function (reason) {
            console.log("error handler second");
        });
    });
}

ИfindUser Функция содержит пул и запрос и находится в файле моделей:

var connection = require('../dbConnection');
var loginC = require('../controllers/login');

function Login() {
    var me = this;
    var pool = connection.getPool();

    me.findUser = function(params, res) {
        var username = params.username;

        pool.getConnection(function (err, connection) {
            console.log("Connection ");

            if (err) {
                console.log("ERROR 1 ");
                res.send({"code": 100, "status": "Error in connection database"});
                return;
            }

            connection.query('select Id, Name, Password from Users ' +
                'where Users.Name = ?', [username], function (err, rows) {
                connection.release();
                if (!err) {
                    return rows;
                } else {
                    return false;
                }
            });

            //connection.on('error', function (err) {
            //    res.send({"code": 100, "status": "Error in connection database"});
            //    return;
            //});
        });
    }
}

module.exports = new Login();

Вывод, который я получаю:

Server listening on port 3000
Something is happening
error handler second
Connection

Итак, что я хочу знать об этом коде, имеет два аспекта:

Почему первое обещание не ждетfindUser вернуться, прежде чем продолжить с if / else, и что мне нужно изменить, чтобы это произошло?Почемуerror handler second выдвинутый, но неFailed?

Я чувствую, что что-то совершенно не понимаю в обещаниях. Я благодарен за любой ответ. Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос