假设我有一条这样的路线
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的,并且是异步工作的,所以它不会等待第一个查询的完成来执行第二个查询。
我将如何重写这一点,使第一个查询的执行总是在执行第二个查询之前首先完成?
把它放在另一个里面然后()
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 中看出了些端倪,在这个宏里,它有自己的一套表达变