在执行第二个查询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之前竞争第一个查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章
mongoose mongodb nodejs的bodyparser错误