使用promise.coroutine创建快速控制器的最佳方法是什么?

时间:2015-12-29 21:47:01

标签: node.js express bluebird es6-promise

我有以下快递控制器:

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;在每个合作例程之前? 我在哪里可以找到有关快递4中使用es6的最佳实践指南?

1 个答案:

答案 0 :(得分:0)

你可以在节点4+和箭头函数中使用没有蓝鸟的promises,所以也许这样......

//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 });
}