Javascript 使用mongoose函数的承诺
我对承诺不熟悉。我尝试将它们与mongoose查询函数一起使用,比如Javascript 使用mongoose函数的承诺,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我对承诺不熟悉。我尝试将它们与mongoose查询函数一起使用,比如find()和findById()。一切似乎都正常,但我不确定这是否是链接的正确方式。使用承诺的目的是消除回调地狱,但我链接的方式与回调非常相似。有没有更好的方法来写这条路线 router.get('/homehr/employees/new', middleware.isLoggedInAsHR, (req, res) => { Department.find({}) .exec() .then((all
find()
和findById()
。一切似乎都正常,但我不确定这是否是链接的正确方式。使用承诺的目的是消除回调地狱,但我链接的方式与回调非常相似。有没有更好的方法来写这条路线
router.get('/homehr/employees/new', middleware.isLoggedInAsHR, (req, res) => {
Department.find({})
.exec()
.then((allDepartments) => {
Employee.findById(req.user.employee.id)
.exec()
.then((foundEmployee) => {
res.render('hr/employees/new', {
departments: allDepartments,
employee: foundEmployee,
blogs: allBlogs
});
});
})
.catch((err) => {
console.log(err);
req.flash('error', err.message);
return res.redirect('back');
});
});
您的路由似乎不依赖于按顺序获取模型。因此,您可以用以下更好的方式编写:
router.get('/homehr/employees/new',middleware.isLoggedInAsHR,async(req,res)=>{
试一试{
const allDepartments=wait Department.find({});
const foundEmployee=await Employee.findById(req.user.Employee.id);
res.render(“人力资源/员工/新员工”{
部门:所有部门,
员工:foundEmployee,
博客:所有博客
});
}捕捉(错误){
控制台日志(err);
请求闪存(“错误”,错误消息);
return res.redirect('back');
}
)};
您肯定应该切换到async/await
。这是最终的回调地狱解决方案。您似乎错过了从数据库获取日志,但使用allBlogs作为变量。日志获取在此路径之外完成。这项工作非常感谢您的回答。我还没有学习async/await,但这似乎解决了代码缩进问题。