Mysql 在Nodejs路由中执行多个查询
我有Node.js post route,在其中我使用async/await按顺序执行几个查询Mysql 在Nodejs路由中执行多个查询,mysql,node.js,post,async-await,Mysql,Node.js,Post,Async Await,我有Node.js post route,在其中我使用async/await按顺序执行几个查询 router.post("/foo", async (req, res) => { const qr1 = "str1"; await db.query(qr1); // Works fine const qr2 = "str2"; await db.query(qr2); // Works fine const qr3 = "str3"; awa
router.post("/foo", async (req, res) => {
const qr1 = "str1";
await db.query(qr1); // Works fine
const qr2 = "str2";
await db.query(qr2); // Works fine
const qr3 = "str3";
await db.query(qr3, async (err, result) => {
if (err) {
console.log(err);
}
if (result.length > 0) {
// Required data is received – That part works
// do something and continue to step 4
}
});
// step 4 – Never gets here
});
所有执行表操作(即删除、插入等)的查询都可以正常工作。一旦进入select查询,我就会收到所需的数据,但我需要继续进行下一步,而这一步不会发生。
我知道我可以通过在步骤3中嵌套步骤4来完成我需要的任务,但我想知道是否有其他方法可以做到这一点。您遇到的问题是注释//步骤4立即执行,而异步(执行查询3时,会异步执行错误代码。以下是为获得结果而更正的代码:
router.post("/foo", async (req, res) => {
try {
const qr1 = "str1";
await db.query(qr1); // Works fine
const qr2 = "str2";
await db.query(qr2); // Works fine
const qr3 = "str3";
const q3Result = await db.query(qr3);
console.log('step 4');
// step 4 – Should work fine
}
catch(err) {
console.log(err);
}
});
当您发送回响应时,请求/响应周期结束。您确定在函数中没有调用res.send()或类似的东西吗。@khan我检查过了。我不相信我会这样做。您使用什么来查询数据库?例如,您确定您的库的
db.query
返回承诺吗?@StockOverlaw。只需一个简单的MySQL select查询