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而不是下划线,我也有同样的行为。
答案 0 :(得分:8)
问题在于您的Restaurant.findById
行。该函数似乎是异步的; _.map
是同步的。
因此,当您返回数据时,已经很晚了。 _.map
所做的迭代可能已经完成了。
对于您想要的异步内容,也许您应该考虑使用async(async.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);
});
}
};