_.map无法正常工作

Sam*_*ake 2 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);
    });

  }
};
Run Code Online (Sandbox Code Playgroud)

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

我尝试过lodash而不是下划线,我得到了同样的行为.

San*_*nda 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);
});
Run Code Online (Sandbox Code Playgroud)