Нодеи выражают и обещают не делать то, что я ожидаю
Я пытаюсь создать 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
?Я чувствую, что что-то совершенно не понимаю в обещаниях. Я благодарен за любой ответ. Благодарю.