在执行第二个查询Nodejs Mongodb之前竞争第一个查询[重复]

Posted

技术标签:

【中文标题】在执行第二个查询Nodejs Mongodb之前竞争第一个查询[重复]【英文标题】:Competing 1st query before executing 2nd query Nodejs Mongodb [duplicate] 【发布时间】:2019-05-05 05:05:36 【问题描述】:

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

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();

);

我想在第二个查询中使用一些数据,这些数据将由第一个查询返回。但现在我不能这样做,因为根据我的理解(如果我错了,请纠正我)这两个查询都是承诺并且异步工作,所以它不会等待第一个查询完成来执行第二个查询。

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

【问题讨论】:

【参考方案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)
  
);

【讨论】:

以上是关于在执行第二个查询Nodejs Mongodb之前竞争第一个查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django在返回第一个请求之前执行第二个请求

使用nodejs更新mongodb中的相对模式

mongoose mongodb nodejs的bodyparser错误

mongoose mongodb nodejs的bodyparser错误

在NodeJS中按值排序数组

nodejs+express+MongoDB实现todolist