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