Как сделать прелоадер пока выполняется функция

Есть очень большой код и с множеством функций. При нажатие на кнопку, селектор, чекбокс - функция (на мобильных устройствах) выполняется в среднем 5 секунд. Я бы хотел чтоб в эти 5 секунд показывалась гифка загрузки. Как это можно реализовать? Код большой, и какой именно кусок нужно показать тут я не знаю. Там есть массив с картинками, которые скорей всего и грузит выполнение функций. Я пытался сделать это при помощи

var p = Promise.resolve([1,2,3]);
p.then(function(v) {
  console.log(v[0]); // 1
});

Но так и не разобрался как правильно это записать Помогите кому не жалко написать маленький пример.

Сам массив вот

 const arr = [
      // Категория 1, категория 2, href, src, text
       ["etika", "vikl", "images/etika/vikl/legrand_etika_672601.png", "images/etika/vikl/ii/legrand_etika_672601.png", "<b>Etika</b><br>Выключатель"],
       ["etika", "vikl", "images/etika/vikl/legrand_etika_672401.png", "images/etika/vikl/ii/legrand_etika_672401.png", "<b>Etika</b><br>Выключатель"],
    ....
 ];
    const collectValue = document.getElementById("display_avatar2").value;
    const mechTypeValue = document.getElementById("display_avatar6").value;
    
    const content_el1 = document.querySelector(".ere");
    const content_el2 = document.querySelector(".ere2");
    const content_el3 = document.querySelector(".ere3"); 
    const content_el4 = document.querySelector(".ere4");
    const content_el5 = document.querySelector(".ere5");

    content_el1.innerHTML = arr
      .filter(([collect, mechtype]) => {
        return (collectValue == collect)
        && (mechTypeValue == "allmax" || mechTypeValue == mechtype)
      })
      .map(([collect, mechtype, href, src, text]) => `
        <a href="${href}" > <div class="varic2">
            <img class="notact2" src="${src}" />
          <div>${text}</div>
        </div></a>
      `).join("");
    

    content_el2.innerHTML = arr
      .filter(([collect, mechtype]) => {
        return (collectValue == collect)
        && (mechTypeValue == "allmax" || mechTypeValue == mechtype)
      })
      .map(([collect, mechtype, href, src, text]) => `
        <a href="${href}"> <div class="varic2">
            <img class="notact2" src="${src}" />
          <div>${text}</div>
        </div></a>
      `).join("");
      
    content_el3.innerHTML = arr
      .filter(([collect, mechtype]) => {
        return (collectValue == collect)
        && (mechTypeValue == "allmax" || mechTypeValue == mechtype)
      })
      .map(([collect, mechtype, href, src, text]) => `
        <a href="${href}"> <div class="varic2">
            <img class="notact2" src="${src}" />
          <div>${text}</div>
        </div></a>
      `).join("");
      
      content_el4.innerHTML = arr
      .filter(([collect, mechtype]) => {
        return (collectValue == collect)
        && (mechTypeValue == "allmax" || mechTypeValue == mechtype)
      })
      .map(([collect, mechtype, href, src, text]) => `
        <a href="${href}"> <div class="varic2">
            <img class="notact2" src="${src}" />
          <div>${text}</div>
        </div></a>
      `).join("");
      
      
      content_el5.innerHTML = arr
      .filter(([collect, mechtype]) => {
        return (collectValue == collect)
        && (mechTypeValue == "allmax" || mechTypeValue == mechtype)
      })
      .map(([collect, mechtype, href, src, text]) => `
       <a href="${href}">  <div class="varic2">
            <img class="notact2" src="${src}" />
          <div>${text}</div>
        </div> </a>
      `)
.join("");

Ответы (0 шт):