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.