Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js 在执行第二个查询Nodejs Mongodb之前竞争第一个查询_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 在执行第二个查询Nodejs Mongodb之前竞争第一个查询

Node.js 在执行第二个查询Nodejs Mongodb之前竞争第一个查询,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,假设我有一条这样的路线 router.post('/:subject_ID', (req, res) => { // First Query Student.findOne({student_ID: req.body.student_ID}) .exec() .then() .catch(); // Second Query Subject.findById(req.params.subject_ID) .exec()

假设我有一条这样的路线

router.post('/:subject_ID', (req, res) => {

    // First Query
    Student.findOne({student_ID: req.body.student_ID})
    .exec()
    .then()
    .catch();

    // Second Query
    Subject.findById(req.params.subject_ID)
    .exec()
    .then()
    .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){
  }
});
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){
  }
});