2015-12-29 42 views
0

我有以下明确的控制器: 使用promise.coroutine创建快速控制器的最佳方式是什么?

var Promise = require('bluebird'); 
var co = Promise.coroutine; 

class MainController { 
    constructor(env) { 
    this.env = env; 
    } 

    index() { 
    var self = this; 
    return co(function*(req, res, next) { 
     var trips = yield self.env.repo.trips.getTrips(); 
     var viewModel = new ViewModelBase(req, {layout: 'layout', trips: trips}); 
     res.render('index', viewModel); 
    }); 
    } 
} 

我使用这个控制方式如下:

var mainController = new MainController(this.env); 
router.get('/', mainController.index()); 

有没有办法让这个代码更加清晰? 我可以避免var self = this;在每个协同例程之前? 从哪里可以找到关于express 4中使用es6的最佳实践指南?

回答

0

可以在节点4+和箭头的功能,所以也许是这样使用的承诺没有蓝鸟...

//SERVICE 

getTrips(){ 
    return new Promise((resolve, reject) => { 
    //TRIP LOGIC? 
    resolve(tripData); 
    //reject(error); 
    }); 
} 

//IN THE CONTROLLER 
index(){ 
    getTrips(someData).then((results)=>{ 
     let viewModel = new ViewModelBase(req, {layout: 'layout', trips: results}); 
     res.render('index', viewModel); 
    }).catch((error)){ //handle error }); 
} 
相关问题