Nodejs expressam e prometem não fazer o que eu espero

Estou tentando criar uma API de logon usando o NodeJS, mas meu código não está fazendo o que eu esperava. Eu sou muito novo para js, promessas e tudo mais, por favor, simplifique qualquer resposta, se possível.

Pelo que vejo na saída do meu código, a primeira parte da promessa não espera até que a funçãofindUsers(...) está terminado.

Eu tenho um arquivo de rotas em que desejo executar algumas funções sequencialmente:

Localizar se o usuário existe no banco de dadosse (1 for verdadeiro) Hash e sal a senha inserida... etc

O arquivo de rotas agora contém:

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");
        });
    });
}

E afindUser A função contém pool e uma consulta e está em um arquivo de modelos:

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();

A saída que recebo é:

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

Então, o que eu quero saber sobre esse código é duplo:

Por que a primeira promessa não está esperandofindUser para retornar antes de prosseguir com o if / else e o que preciso alterar para que isso ocorra?Porque éerror handler second produzido mas nãoFailed?

Sinto que há algo que estou totalmente mal entendido sobre promessas. Sou grato por qualquer resposta. Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion