Le promesse sono adatte per la comunicazione del Controller Modello?

4

Ho un'app Express creata con il generatore fullstack Yeoman Angular per creare un'API per inviare JSON ad angolare.

Sto cercando di trovare il modo migliore per passare le informazioni dal mio modello al mio controller, potrebbe verificarsi un'ulteriore elaborazione nel controller. Attualmente sto usando le promesse. Mi sento a disagio per il fatto che il mio modello abbia restituito una promessa al controller. Dovrei?

Attualmente il mio modello assomiglia a questo:

function returnCountries(lim, offset) {
    var promise = new Promise(function(resolve, reject) {
        //SQL is just an example
        connection.query('SELECT * FROM countries LIMIT 1', function(err, result) {
            return resolve(result);
        });
    })
    return promise
}

function returnCountry(countryID) {
  //not yet implemented
}
module.exports = {
    "returnCountries": returnCountries,
    "returnCountry": returnCountry
}

E il controller è simile a questo:

var Country = require('./country.model');

// Get list of countries
exports.index = function(req, res) {
      Country.returnCountries().then(function(countries){
              return res.json(200, countries);
})
    
posta Joseph 13.08.2014 - 01:40
fonte

1 risposta

2

Non sarebbe più semplice passare il callback a connection.query in giro?

// model

function listCountries(limit, offset, callback) {
    // SQL is just an example
    connection.query('SELECT * FROM countries LIMIT 1', callback);
}

// controller

var Country = require('./country.model');

exports.index = function(req, res) {
    var limit, offset;

    Country.listCountries(limit, offset, function(error, result) {
        // TODO: handle error
        return res.json(200, result);
    });
};

A meno che il controller non abbia molto più lavoro asincrono da fare; quindi le promesse avrebbero probabilmente un senso per evitare l'inferno del callback. Forse usando solo una promessa è ciò che ti sta mettendo a disagio, sembra un po 'eccessivo a questo punto.

    
risposta data 21.11.2014 - 21:23
fonte

Leggi altre domande sui tag