Как дождаться завершения синхронной функции с таймаутами?

Есть функция

let FFF = async (A1, A2, A3, A4, A5) => {
   const intId_1 = setInterval(() => {
   
   /* код */

      if (0 === 0) {clearInterval(intId_1);
         const intId_2 = setInterval(() => {
         
         /* код */
            
            if (0 === 0) {clearInterval(intId_2);
               const intId_3 = setInterval(() => {
            
               /* код */
               
                  if (0 === 0) {clearInterval(intId_3);
            
                     /* здесь функция заканчивается */
            
                  };
               }, 50);
            }; 
         }, 50);
      };
   }, 50);     
};

Мне надо дождаться завершения функции, но я не понимаю куда тут вставить Promise/await. Мне надо запустить эту функцию первый раз с одними аргументами, дождаться когда она завершится, а потом запустить второй раз, с другими аргументами. Подскажите кто знает, но только на JS, на jQuery не надо)


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

Автор решения: Solt

Нужно чтобы функция возвращала promise. А внутри промиса когда понадобится - вызвать функции resolve или reject.

Если таймеры одноразовые, чтобы не выключать их каждый раз, можно использовать setTimeout вместо setInterval.

let FFF = async (A1, A2, A3, A4, A5) => {
return new Promise((resolve,reject)=>{
   const intId_1 = setInterval(() => {
   
   /* код */

      if (0 === 0) {clearInterval(intId_1);
         const intId_2 = setInterval(() => {
         
         /* код */
            
            if (0 === 0) {clearInterval(intId_2);
               const intId_3 = setInterval(() => {
            
               /* код */
               
                  if (0 === 0) {clearInterval(intId_3);
            
                     console.log('done')
                      resolve('Ready')
                  };
               }, 50);
            }; 
         }, 50);
      };
   }, 50); 
   })
};

FFF().then((pr)=>{
  console.log(pr)
})

→ Ссылка