Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用mongoose函数的承诺_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript 使用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

我对承诺不熟悉。我尝试将它们与mongoose查询函数一起使用,比如
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,但这似乎解决了代码缩进问题。