我有一个物品清单(菜肴),我需要从mongodb获得每个项目(菜)的所有者。我正在使用promises来执行此操作
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(dish)函数返回一个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得到解析之前调用,因此从我知道promise.all的方式返回null,这应该不是这样。
安静的承诺,任何帮助将不胜感激。
答案 0 :(得分:2)
您错过了getOwners
中的退货声明。你的代码应该是:
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
值,因此会立即解决。