_.map无法正常工作

时间:2013-09-17 06:33:17

标签: javascript node.js underscore.js lodash

var models = require('../models')
  , _ = require('underscore')
  , Restaurant = models.restaurant
  , RestaurantBranch = models.restaurant_branch;


module.exports = {
  index: function (req, res) {
    var title = 'Restaurants near you';

    RestaurantBranch.find({country: 'Ghana', region: 'Greater Accra'}, function (err, branches) {


      var results = _.map(branches, function (branch) {
        Restaurant.findById(branch._restaurantId, function (err, restaurant) {
          return {
            'restaurant': restaurant,
            'branch': branch
          };
        });
      });

      res.send(results);
    });

  }
};

我遇到问题让_.map以我想要的方式工作。而不是获得具有对象{restaurant: restaurant, branch: branch}的新数组。我改为[null, null]

我尝试过lodash而不是下划线,我也有同样的行为。

2 个答案:

答案 0 :(得分:8)

问题在于您的Restaurant.findById行。该函数似乎是异步的; _.map是同步的。

因此,当您返回数据时,已经很晚了。 _.map所做的迭代可能已经完成了。

对于您想要的异步内容,也许您应该考虑使用asyncasync.map),

使用async的示例:

async.map(branches, function (branch, callback) {
  Restaurant.findById(branch._restaurantId, function (err, restaurant) {
    callback(null, { restaurant: restaurant, branch: branch });
  });
}, function (err, results) {
    res.send(results);
});

答案 1 :(得分:0)

我找到了解决这个问题的另一种方法。因为我正在使用猫鼬,所以我可以轻松地使用人口来获取餐厅数据,而不是使用下划线/ lodash。

var models = require('../models')
  , Restaurant = models.restaurant
  , RestaurantBranch = models.restaurant_branch;


module.exports = {
  index: function (req, res) {
    var title = 'Restaurants near you';

    RestaurantBranch.find({country: 'Ghana', region: 'Greater Accra'})
      .populate('_restaurantId')
      .exec(function (err, branches) {
        res.send(branches);
      });

  }
};