Соответственно вместо loading можно использовать, что угодно. И в finaly вставлять не обязательно, можно уже в ошибке некий код обрабатывать, в зависимости от результата запроса что-то делать. Показал частый пример
Зачем такие извращения все куда проще
Но для сетки есть более лучшии техники. им не нужно задавать внешнии отступы, а сделать их впритык друг к другу, и уже в ячейках добавлять видимые блоки и давать им отступы. А еще лучше юзать гриды, раз все равно используешь flex-gap
document.getElementById('exampleModal') подозреваю проблема в этом. Я так понимаю ты используешь элемент из виртуального DOM. Повесь на этот элемент ref и передавай его в экземпляр класса.