Javascript _.地图工作不正常

Javascript _.地图工作不正常,javascript,node.js,underscore.js,lodash,Javascript,Node.js,Underscore.js,Lodash,我在让地图按我想要的方式工作时遇到了问题。而不是使用对象获取新数组{restaurant:restaurant,branch:branch}。我得到的是[null,null] 我试过用lodash代替下划线,得到了同样的结果。问题在于你的餐厅。findById行。该函数似乎是异步的\地图是同步的 所以,当你返回数据时,时间就晚了。由\uuu.map进行的迭代可能已经完成 对于你想要的异步的东西,也许你应该考虑使用(),< /P> 使用异步的示例: var models = require('..

我在让地图按我想要的方式工作时遇到了问题。而不是使用对象获取新数组
{restaurant:restaurant,branch:branch}
。我得到的是
[null,null]


我试过用lodash代替下划线,得到了同样的结果。

问题在于你的
餐厅。findById
行。该函数似乎是异步的<代码>\地图是同步的

所以,当你返回数据时,时间就晚了。由
\uuu.map
进行的迭代可能已经完成

<>对于你想要的异步的东西,也许你应该考虑使用(),< /P> 使用异步的示例:

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

  }
};

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

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

  }
};