Ломаю голову над промисами:
mariadb.createConnection(config)
.then(connection => {
connection.query('INSERT INTO...')
.then(() => {
console.log('Успешно.');
})
.catch(error => {
console.log('Не удалось.');
connection.end();
throw error;
});
connection.query('INSERT INTO...')
.then(() => {
console.log('Успешно.');
connection.end();
})
.catch(error => {
console.log('Не удалось.');
connection.end();
throw error;
});
})
.catch(error => {
console.log('Попытка подключения не удалась.');
throw error;
});
Нужно несколько раз записать значения в БД. Можно ли как-то вынести блок с connection.query
в отдельную функцию чтобы уйти от дублирования?
async/await
Можно попробовать так, если можно выполнять запросы синхронно
async function doDBInsert (config) {
let connection;
try {
connection = await mariadb.createConnection(config);
try {
await connection.query('INSERT INTO...')
console.log('Успешно.', 1);
await connection.query('INSERT INTO...')
console.log('Успешно.', 2);
} catch (error) {
console.log('Не удалось.', error);
} finally {
// или тут
connection.end();
}
} catch (error) {
console.log('Попытка подключения не удалась.', error);
} finally {
// можно тут закрыть connection если не undefined
// if (connection) connection.end();
}
или завернуть их в Promise.all если можно запустить параллельно
function logError (e) {
console.log('Не удалось.', e);
return e;
}
await Promise.all([
connection.query('INSERT INTO...').catch(logError),
connection.query('INSERT INTO...').catch(logError),
]);
Виртуальный выделенный сервер (VDS) становится отличным выбором
Столкнулся с такой проблемой при использовании socketio: есть цикл в нем находится socket