首页 > 解决方案 > 使用带有猫鼬函数的 Promise

问题描述

我是新来的承诺。我正在尝试将它们与猫鼬查询功能一起使用,例如find()and 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');
    });
});

标签: javascriptnode.jsexpressmongoose

解决方案


您的 Routes 似乎不依赖于按顺序获取模型。所以你可以用更好的方式写这个,如下所示:

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

推荐阅读