Promise.all不用于asynchronous内部函数

我有一个项目(菜),我需要从MongoDB的每个项目(盘)的业主清单。 我正在使用承诺执行这样的

Dish.find({}) .limit(lim) .sort({created : 1}) .exec() .then(function(dishes){ if (!dishes) { return next(new errors.ResourceNotFoundError('The resource you requested could not be found.')) next() } return dishOwners.getOwners(dishes) }) .then(function(data){ return res.send(200, data) next() }) .catch(function(err){ return next(new errors.InternalError(err.message)) next() }) 

dishOwners.getOwners(盘)函数返回一个Promise.all,它像所有的盘子一样

 module.exports.getOwners = function(dishes){ return Promise.all(dishes.map(function(dish){ User .findOne({_id:dish.created_by}) .then(function(user){ return { dish: dish, owner: user } }) .catch(function(err){ log.error(err.message) }) })) } 

问题是这样的

  return res.send(200, data) next() 

在Promise.all被调用之前得到解决,因此返回null,从我知道promise.all的方式应该不是这样的情况。

安静新承诺,任何帮助将不胜感激。

您在getOwners中缺less返回语句。 你的代码应该是:

 module.exports.getOwners = function(dishes){ return Promise.all(dishes.map(function(dish){ return User .findOne({_id:dish.created_by}) .then(function(user){ return { dish: dish, owner: user } }) .catch(function(err){ log.error(err.message) }) })) } 

由于这个错误,你传递Promise.all是一个undefined值的数组,所以它立即解决。