У меня есть следующий асинхронный метод:
alreadyLoaded: async function (id) {
const pool = await poolPromise;
return pool.request()
.input('idParameter', id)
.query('SELECT count(*) AS value FROM dbo.partidos WHERE id=@idParameter')
.then(result => {
console.log(result.recordset[0].value)
result.recordset[0].value > 0
}).catch(function(err) {
console.log(err.message);
});
Вызывается в другом:
processMatches: function(payload) {
payload.matches.forEach(p => {
if(partidosRepository.alreadyLoaded(p.id))
{
console.log("El partido ya fue cargado.");
return;
}
Метод alreadyLoaded
проверяет, вставлена ли какая-либо запись в базу данных, и вызывается ли она внутри другого метода для проверки. Проблема здесь в том, что метод processMatches
продолжает обрабатывать записи до того, как alreadyLoaded
завершит работу с текущей.
У меня неправильное управление обещаниями, может кто-нибудь помочь мне решить эту проблему?
Вот соединение с базой данных:
const poolPromise = new sql.ConnectionPool(config)
.connect()
.then(pool => {
console.log('Connected to localhost '+ config.database +' database');
return pool;
})
.catch(err => console.log('Database connection failed. Error: ', err));
module.exports = {
sql, poolPromise
}