Если цикл должен продолжаться независимо от ошибок, по-простому, сильно не переделывая можно так с использованием Promise
const ajaxloop = (arr) => {
let prom = Promise.resolve(true)
for (const el of arr) {
const tableName = el.dataset.table;
prom = prom.then ( _ => return new Promise (res => {
$.request('onAjax', {
data: {
'table': tableName
},
success: function(data) {
// ответ сервера об успешном выполнении запроса
},
error: function(data) {
// ответ об ошибке
},
complete: function(data) {
// выполнится независимо от успешного запроса или ошибки
res() // Тут промис разрешился
}
});
})
)
}
return prom
}
Вызываем все это так
loader.classList.remove('hide');
ajaxloop (arr)
.then (_ => loader.classList.add('hide');) // что то там гасим, когда все вызовы закончатся.