2015-12-29 45 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 }); 
} 
相關問題