Nodejs esprime e promette di non fare ciò che mi aspetto

Sto cercando di creare un’API di accesso usando NodeJS, ma il mio codice non sta facendo quello che mi aspetto. Sono molto nuovo a js, promesse e tutto questo per favore semplifica ogni risposta se ansible.

Da quello che posso vedere nell’output del mio codice, la prima parte di promise non aspetta che la funzione findUsers(...) sia finita.

Ho un file di rotte in cui voglio eseguire alcune funzioni in sequenza:

  1. Trova se l’utente esiste nel database
  2. se (1 è vero) Hash e salta la password immessa
  3. … eccetera

Il file di rotte ora contiene:

 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 la funzione findUser contiene il pooling e una query e si trova in un file di modelli:

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

L’output che ottengo è:

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

Quindi quello che voglio sapere su questo codice è duplice:

  1. Perché la prima promise non è aspettare che findUser ritorni prima di procedere con if / else e cosa devo cambiare perché ciò avvenga?
  2. Perché error handler second viene inviato per error handler second ma non è Failed ?

Mi sento come se ci fosse qualcosa di totalmente incomprensibile sulle promesse. Sono grato per qualsiasi risposta. Grazie.