将承诺与猫鼬功能一起使用

时间:2020-04-19 12:04:47

标签: javascript node.js express mongoose

我是新来的诺言。而且我正在尝试将它们与像find()findById()这样的猫鼬查询函数一起使用。一切似乎都正常,但是我不确定这是否是链接then的正确方法。使用Promise的目的是消除回调地狱,但是我链接then的方式看起来与回调非常相似。有没有更好的方法来编写此路线?

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');
    });
});

1 个答案:

答案 0 :(得分:1)

您的路线似乎不具有依序获取模型的依赖性。因此,您可以按照以下更好的方式编写此代码:

router.get('/homehr/employees/new', middleware.isLoggedInAsHR, async (req, res) => {
   try{
      const allDepartments = await Department.find({});
      const foundEmployee = await Employee.findById(req.user.employee.id);
      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');
   }
)};