我遇到了与node.js一起使用的mongoose的问题。在我的模型中,我只有组主管的ID,并且在此路由中我还想将supervisorName添加到变量(此名称存储在组模型中)。所以,是的,我已经阅读了一些关于承诺的内容,但是,我仍然不知道如何解决这个问题。 (基本上,我只想循环遍历所有组,从mongodb获取模型,并为每个组分配主管名称)
router.get('/manage', function(req, res, next) {
Group.find({}, function(err, groups) {
groups.forEach(function(group) {
Group.findById(group.supervisor, function(err, supervisor) {
group.supervisorName = supervisor.name;
console.log(supervisor.name);
});
});
}).then(function() {
res.render('groups/groups_manage', {groups : groups});
});
});
答案 0 :(得分:0)
您可以{group 1}将您的群组数组转换为map
数组并使用promises
解决所有问题。
Promise.all
router.get('/manage', function(req, res, next) {
Group.find({})
.exec() // 1
.then(groups => {
return Promise.all(groups.map(group => { // 2, 3
return Group.findById(group.supervisor)
.exec()
.then((supervisor) => { // 4
group.supervisorName = supervisor.name;
return group;
});
}));
})
.then(propGroups => {
res.render('groups/groups_manage', {groups : popGroups});
});
});
方法并删除回调。exec
接受一系列承诺。它等待所有人解决,他们中的任何一个拒绝(给出错误)。 注意:承诺是并行执行的 Promise.all
个对象,我们将它们映射到promises中。致电group
并再次使用.findById
来获取承诺。 注意:请记住回复您的承诺