【发布时间】:2017-12-05 16:00:33
【问题描述】:
我确定以前有人问过这个问题,但由于某种原因我无法让它工作。最近开始使用带有 Mongoose 的 NodeJS(习惯于异步执行所有操作) 我想要实现的一件事是根据某种逻辑组合来自两个不同集合的两个结果。
所以假设我有这个get函数,它应该异步获取所有技能(例如),然后从另一个集合中,我应该获取所有特定的用户技能,并将它们组合成一组结果,这将添加一个“在 userSkills 集合中找到 isSelected:true" 属性。这是用 ES6 编写的:
exports.get = (req, res) => {
const combineSkills = (allSkills)=>{
const { userid } = req.headers;
return UserSkills.GetUserSkills(userid).then((response)=>{
for(var i=0;i<=response.length-1;i++){
var userSkill = response[i];
var found = allSkills.filter(e=>e.id==userSkill.skillId);
if(found.length>0){
found.isSelected=true;
}
}
return allSkills;
});
}
const respond = (response) => {
res.json({
ReturnCode: 2,
ReturnObject: response
})
}
// error occured
const onError = (error) => {
res.status(403).json({
ReturnCode: 0,
ReturnObject: error.message
})
}
Skills.GetAll()
.then(combineSkills)
.then(respond)
.catch(onError)
}
如您所见,我正在尝试调用 Skills.GetAll() 技能,然后将结果获取到 combineSkills 对象,执行一些逻辑并返回新对象。 我知道我的问题出在 combineSkills 函数中,我的 return 语句在逻辑更改之前返回对象。
我的问题是这种场景的正确语法是什么?
【问题讨论】:
标签: javascript node.js mongodb asynchronous mongoose