在执行第二查询Nodejs Mongodb之前先竞争第一查询

时间:2018-12-03 20:47:15

标签: node.js mongodb mongoose

假设我有一条看起来像这样的路线

_id

我想在第二查询中使用一些将由第一查询返回的数据。但是现在我无法执行此操作,因为基于我的理解(如果我错了,请纠正我),这两个查询都是有保证的并且异步运行,因此它不会等待第一个查询完成来执行第二个查询。

我将如何重写此代码,以使在执行第二个查询之前总是先完成第一个查询的执行?

1 个答案:

答案 0 :(得分:1)

只需将其放在另一个then()

的内部
router.post('/:subject_ID', (req, res) => {
    // First Query
    Student.findOne({student_ID: req.body.student_ID})
    .exec()
    .then(result=>{
      // Second Query
      return Subject.findById(req.params.subject_ID).exec();
    }).then(result2=>{
      res.render(...);
    })
    .catch();
});

或使用async/await(如果有):

router.post('/:subject_ID', async (req, res) => {
 try{
    // First Query
    let result = await Student.findOne({student_ID: req.body.student_ID}).exec();
    let result2 = await Subject.findById(req.params.subject_ID).exec();
    res.render(...);
  }catch(e){
  }
});