Javascript Node.js-mongoose承诺-循环通过
我在node.js中使用mongoose时遇到问题。在我的模型中,我只有组主管的ID,在这个路由中,我还想将supervisorName添加到变量中(这个名称存储在组模型中)。所以,是的,我读过一些关于承诺的书,但我仍然不知道如何解决这个问题。(基本上,我只想遍历所有组,从mongodb获取它们的模型,并为每个组分配主管名称)Javascript Node.js-mongoose承诺-循环通过,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在node.js中使用mongoose时遇到问题。在我的模型中,我只有组主管的ID,在这个路由中,我还想将supervisorName添加到变量中(这个名称存储在组模型中)。所以,是的,我读过一些关于承诺的书,但我仍然不知道如何解决这个问题。(基本上,我只想遍历所有组,从mongodb获取它们的模型,并为每个组分配主管名称) 您可以将您的组数组映射到承诺数组中,并使用Promise.all解决所有问题 router.get('/manage', function(req, res, next)
您可以
将您的组数组映射到承诺数组中,并使用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});
});
});
说明:
Mongoose模型方法支持回调和承诺接口。但是,要使用promise接口,我们需要使用exec
方法并删除回调
承诺。所有
都包含一系列承诺。它等待所有问题得到解决,并等待任何问题被拒绝(给出错误)。注:承诺是并行执行的
我们有一个group
对象数组,我们将它们映射为承诺。调用.findById
,然后再次使用exec
从中获得承诺注意:记住要回报你的承诺
我们更新对象,并将其作为promise的最终结果返回李>
还有一个信息,主管是另一个组;哇,你让我开心,你能解释我为什么要这样做吗?(请对代码或其他内容发表意见)请添加如何处理两个操作?例如,findById
并通过OtherModel.countDocuments
计算此元素在另一个集合中被引用的频率?
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});
});
});