async await 在 express.js 和 mysql.js 中没有响应
async await doesn't response in express.js with mysql.js
首先,我正在尝试将数据插入餐厅table。
完成后(控制台日志)。它应该调用第二个查询(插入审计)。但它不会调用该查询并保留第一个函数。
我该如何解决这个问题?
async function createRestaurant(req, res, next) {
const restaurant = {
name: req.body.name,
description: req.body.description
}
const audits = {
description: req.body.description
}
let query = "INSERT INTO restaurant SET ?";
await connection.query(query, restaurant, (error, results) => {
if (error) {
console.log("Error at res")
return true;
} else {
console.log("200 res")
return true;
}
});
let query2 = "INSERT INTO audits SET ?";
await connection.query(query2, audits, (error, results) => {
if (error) {
console.log("Error at audit")
} else {
console.log("200 res")
}
});
}
module.exports = {
createRestaurant: createRestaurant
}
您不应将回调与 async/await 一起使用,async/await 的目的是以同步方式编写异步代码。
实际上,您可以 return 等待调用并使用 try/catch 块。
在您的示例中,函数在第一个查询回调中 returned,因此永远不会到达第二个查询。
async function createRestaurant(req, res, next) {
const restaurant = {
name: req.body.name,
description: req.body.description
}
const audits = {
description: req.body.description
}
try {
let query = "INSERT INTO restaurant SET ?";
let resRestaurant = await connection.query(query, restaurant);
console.log(200, 'resRestaurant');
let query2 = "INSERT INTO audits SET ?";
let resAudit = await connection.query(query2, audits);
console.log(200, 'resAudit');
return {resRestaurant, resAudit}; // You can return data here
} catch(e) {
console.log('err in requests', e); // you can also use try/catch block for each request
}
}
你不能在任何地方都使用 async / await 。如果你想使用 async / await 它应该是一个承诺。由于 mysqljs 不是基于承诺的库,因此您不能在此处使用 async / await 。
首先,我正在尝试将数据插入餐厅table。
完成后(控制台日志)。它应该调用第二个查询(插入审计)。但它不会调用该查询并保留第一个函数。
我该如何解决这个问题?
async function createRestaurant(req, res, next) {
const restaurant = {
name: req.body.name,
description: req.body.description
}
const audits = {
description: req.body.description
}
let query = "INSERT INTO restaurant SET ?";
await connection.query(query, restaurant, (error, results) => {
if (error) {
console.log("Error at res")
return true;
} else {
console.log("200 res")
return true;
}
});
let query2 = "INSERT INTO audits SET ?";
await connection.query(query2, audits, (error, results) => {
if (error) {
console.log("Error at audit")
} else {
console.log("200 res")
}
});
}
module.exports = {
createRestaurant: createRestaurant
}
您不应将回调与 async/await 一起使用,async/await 的目的是以同步方式编写异步代码。 实际上,您可以 return 等待调用并使用 try/catch 块。
在您的示例中,函数在第一个查询回调中 returned,因此永远不会到达第二个查询。
async function createRestaurant(req, res, next) {
const restaurant = {
name: req.body.name,
description: req.body.description
}
const audits = {
description: req.body.description
}
try {
let query = "INSERT INTO restaurant SET ?";
let resRestaurant = await connection.query(query, restaurant);
console.log(200, 'resRestaurant');
let query2 = "INSERT INTO audits SET ?";
let resAudit = await connection.query(query2, audits);
console.log(200, 'resAudit');
return {resRestaurant, resAudit}; // You can return data here
} catch(e) {
console.log('err in requests', e); // you can also use try/catch block for each request
}
}
你不能在任何地方都使用 async / await 。如果你想使用 async / await 它应该是一个承诺。由于 mysqljs 不是基于承诺的库,因此您不能在此处使用 async / await 。