异步实例方法

时间:2016-06-08 13:52:01

标签: node.js sails.js waterline

异步实例方法

我想在模型预订中添加实例方法,此实例方法将对关系模型执行查询并对其执行一些计算。但是,异步返回值是不可能的。

我有一个返回Promise的解决方案,但是当多个实例方法作为json对象返回时,这实际上是不可行的。

控制器

d = "2004-02-06"
substr(d,0,7)
>"2004-02"

模型

// controllers/ParkingController
reservationsCount: function(req, res, next){
  Parking.find('5751401d54f4ca110020c15b').exec(function(err, parking) {
    console.log(parking.reservationsCount())
    res.json({});
  });
}

1 个答案:

答案 0 :(得分:0)

试试这个(未经测试)

<强>模型

getReservationsCount: function() { // no callback since we use Promises
  return Parking.findOne(this.id)
  .populate('reservations')
  .then(function(parking){
    return parking.reservations.length;
  });
},

<强>控制器

reservationsCount: function(req, res){ // next is useless in sails
  Parking.findOne('5751401d54f4ca110020c15b') // findOne to get one object
  .then(function(parking) {
    return parking.getReservationsCount(); // getReservationsCount returns a Promise
  })
 .then(function(reservationsCount){
    return res.json({reservationsCount});
  })
 .catch(function(err){
   sails.log.error(err);
   // handle error
 });
}