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
值的数组,所以它立即解决。