Új hozzászólás Aktív témák

  • Jim-Y

    veterán

    Sziasztok.

    Promise-os kérdésem lenne. Arra lennék kváncsi, hogy hogyan lenne szerintetek érdemes használni, vagy hogy elegáns használni a promise-okat. Adott a következő szituáció:

    - van egy REST service:
    server.get( '/get/articles', getArticles );
    - van azt ezt feldolgozó getArticles függvény
    - illetve van egy articleProvider osztály/modul amit a getArticles függvényből hívok meg. Ponstosabban annak findAll metódusát. Ez felelős az adatbázisból való kiolvasásért

    A kérdés, hogy a getArticles / findAll függvényt hogy kéne megrni, több (működő) verzió is született már, de nem tudom eldönteni, hogy melyik a szép/jó/használható megoldás.

    Megoldás 1, ez született legkésőbb, szerintem ez a legjobb:

    function getArticles( req, res, next ) {
    var promise = new mongoose.Promise;

    promise.onResolve(function( err, articles ) {
    if( err ) {
    console.error( err );
    res.send("Could not read articles");
    }
    res.send( articles );
    });

    articleProvider.findAll( promise );
    }

    ArticleProvider.prototype.findAll = function( promise ) {
    this.Article.find({}, function ( err, articles ) {
    if( err ) {
    promise.reject(new Error( err ));
    }
    promise.fulfill( articles );
    });
    }

    Megoldás 2:

    function getArticles( req, res, next ) {
    articleProvider.findAll().fulfill(res);
    //articleProvider.findAll()
    .reject(new Error("Valamiért rejecteljük"));
    }

    ArticleProvider.prototype.findAll = function() {
    var promise = new Promise,
    self = this;

    promise.onResolve(function( err, res ) {
    if( err ) {
    console.error( err );
    }
    self.Article.find({}, function( err, articles ) {
    if( err ) {
    promise.reject(new Error( err ));
    }
    res.send( articles );
    });
    });
    return promise;
    };

    Ez a reject-re amúgy sem működik jól, mert a res-t nem tudjuk átadni.

    Megoldás 3:

    Ez jó, illetve kompakt, de igy meg nem tudjuk rejectelni ha kéne.

    function getArticles( req, res, next ) {
    var promise = articleProvider.findAll();
    promise.onResolve(function( err, articles ) {
    if( err ) {
    res.send(new Error( err ));
    }
    res.send( articles );
    });
    }

    ArticleProvider.prototype.findAll = function() {
    return this.Article.find().exec();
    };

    stb, még tudnék pár verziót összerni :)

    Vélemények?

    Üdv, és köszi. Remélem érthető a példakód ^^

    megj: mindhárom megoldás működik egyébként.

Új hozzászólás Aktív témák