当前位置: 首页 > 知识库问答 >
问题:

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

郭瀚海
2023-03-14

假设我有一条这样的路线

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

});

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

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

共有1个答案

曹疏珂
2023-03-14

把它放在另一个里面然后()

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){
  }
});
 类似资料:
  • 我有两个查询写在同一时间这样: 在执行第二个查询之前,是否可以使用SQL指令或在代码中获取ID? 谢谢:)

  • 在插入新记录之前,我正在验证记录的存在性。但是,代码不会跳入insert块。在Reader.Close之后跳转到finally block 我怀疑我一定是做错了什么,因为没有例外,而且每次RecordsInfacted=-1

  • 问题内容: 我试图加快PHP脚本的速度,目前正在Mysql域中推送一些PHP逻辑。如果第一个Select不返回行或计数为零,是否可以进行其他选择查询? 请记住,第一个查询需要首先运行,并且 仅 当第一个查询返回空集 时才 应激活第二个查询。 对于上面的2个查询,我有这段代码,但似乎每个查询运行两次(一次计数,一次返回)。有一个更好的方法吗? 问题答案: 一种选择是使用有: SQL小提琴演示 这将从

  • 我正在尝试加速一个PHP脚本,目前我正在推动一些PHP逻辑在Mysql领域的东西。如果第一个select没有返回行或计数为零,是否有方法进行不同的select查询? 请记住,需要首先运行第一个查询,只有在第一个查询返回一个空集时才应激活第二个查询。 对于上面的2个查询,我有这段代码,但它似乎要运行每个查询两次(一次用于计数,一次用于返回)。有没有更好的办法做到这一点?

  • 主要: 用于db连接的Helperclass:

  • 在前面章节里定义的有些宏很长。为了生成展开式,if-match 需要用到图 18.7 和18.8 中的所有代码,以及 [示例代码 18.1] 中的 destruc 。如此之长的宏自然而然地将我们带入最后一个主题:嵌入式语言。如果说短小的宏是Lisp 的扩展,那么大的宏就是在其中定义子语言 可能带有它们自己的语法或者控制结构。我们在 if-match 中看出了些端倪,在这个宏里,它有自己的一套表达变