假设我有一条看起来像这样的路线
_id
我想在第二查询中使用一些将由第一查询返回的数据。但是现在我无法执行此操作,因为基于我的理解(如果我错了,请纠正我),这两个查询都是有保证的并且异步运行,因此它不会等待第一个查询完成来执行第二个查询。>
我将如何重写此代码,以使在执行第二个查询之前总是先完成第一个查询的执行?
答案 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){
}
});