我有Node.js发布路由,在其中我用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";
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
});
所有执行表操作(即删除,插入等)的查询都可以正常工作。进入选择查询后,我会收到所需的数据,但是我需要继续进行下一步,否则将不会发生。我知道我可以通过将步骤4嵌套在步骤3中来完成所需的工作,但是我想知道是否有其他方法可以做到这一点。
您遇到的问题是注释//步骤4立即执行,而async(err代码在执行查询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);
}
});