Глядя на правильный / лучший / лучший способ использования AWAIT с MySQL2 в приложении Node.js / Express.js, когда мне нужно выполнить несколько запросов в одном запросе.
В самом начале своего приложения я создаю пул Promise из конфигурации базы данных
const promisePool = db.promise();
Затем в POST-запросе я принимаю 2 значения, оба из которых мне нужно проверить, действительны, а затем беру возвращенные идентификаторы и вставляю их в другую таблицу.
Ниже была моя первая попытка, но я упускаю одновременно благость JS. (Я слишком упростил все вызовы / SQL для демонстрационных целей),
app.post('/addUserToDepartment', async (req, res) => {
// Get the POST variables
let email = 'example@example.com';
let departmentname = 'sales';
let insertParams = [];
// Need to check if Department ID is even valid
const [departments] = await promisePool.query( "SELECT ? AS deptid", [departmentname] );
// Need to check if Email address is valid
const [user] = await promisePool.query( "SELECT ? AS userid", [email] );
// This would normall be an INSERT or UPDATE statement
if(departments.length && user.length){
const [rows] = await promisePool.query( "SELECT ? AS passedDeptId,? AS passedUserid", [departments[0].deptid, user[0].userid] );
}
res.send( rows )
}
Вот мой второй удар, теперь завершение обещаний.
app.post('/addUserToDepartment', async (req, res) => {
// Get the POST variables
let email = 'example@example.com';
let departmentname = 'sales';
let insertParams = [];
// Need to check if Department ID is even valid
let [[departments],[user]] =
await Promise.all([
promisePool.query( "SELECT ? AS deptid", [departmentname] ),
promisePool.query( "SELECT ? AS userid", [email] )
])
// This would normall be an INSERT or UPDATE statement
if(departments.length && user.length){
let [rows] = await promisePool.query( "SELECT ? AS passedDeptId,? AS passedUserid", [departments[0].deptid, user[0].userid] );
}
res.send( rows )
}
IF в конце все еще не «чувствует» себя правильно, но мне нужно знать, что первые два запроса верны, иначе я отправлю пользователя на страницу с ошибкой.
Что может быть лучшим способом для достижения вышеуказанного результата без чрезмерной потери читабельности?