Javascript поиск дубликатов, цикл

Подскажите пожалуйста , а как прогнать эту функцию несколько раз но с разными console.log , например сначала прошли по выборке :

a2, b2, c2, d2, e2
console.log("a2==b2");
console.log("b2==c2");
console.log("c2==d2");
console.log("d2==e2");

затем я хочу запустить такую же функцию но с другими входными через setTimeout 2 сек :

a1, b1, c1, d1, e1
console.log("a1==b1");
console.log("b1==c1");
console.log("c1==d1");
console.log("d1==e1");

и так 15 раз (комбинаций) одна за другой .Я наблюдаю что стек переполняется запросами не доходя до 15 комбинации зависает . Для примера я зациклил всю эту историю , после 3 комбинации начинать с 1 но при тесте видно - что становиться со временем тяжеловато)) Пробовал чистить set.clear(valid); не помогает .

a1 = 1;
a2 = 2;
a3 = 3;
b1 = 1;
b2 = 2;
b3 = 3;
c1 = 1;
c2 = 2;
c3 = 3;
d1 = 1;
d2 = 2;
d3 = 3;
e1 = 1;
e2 = 2;
e3 = 3;

wild = 10;

Combo1();
function Combo1(){
  var firstNotWild = [a2, b2, c2, d2, e2].find(num => num !== wild);
  var valid = new Set([wild, firstNotWild ?? wild]);
  if(valid.has(a2) && valid.has(b2)) {
    console.log("a2==b2");
    setTimeout(Combo2, 2000);
    if(valid.has(c2)) {
      console.log("b2==c2");
      setTimeout(Combo2, 2000);
      if(valid.has(d2)) {
        console.log("c2==d2");
        setTimeout(Combo2, 2000);
        if(valid.has(e2)) {
          console.log("d2==e2");
          console.log("All match.");
          setTimeout(Combo2, 2000);
        }
      }
    }
  }
}

function Combo2(){
  var firstNotWild = [a1, b1, c1, d1, e1].find(num => num !== wild);
  var valid = new Set([wild, firstNotWild ?? wild]);
  if(valid.has(a1) && valid.has(b1)) {
    console.log("a1==b1");
    setTimeout(Combo3, 2000);
    if(valid.has(c1)) {
      console.log("b1==c1");
      setTimeout(Combo3, 2000);
      if(valid.has(d1)) {
        console.log("c1==d1");
        setTimeout(Combo3, 2000);
        if(valid.has(e1)) {
          console.log("d1==e1");
          console.log("All match.");
          setTimeout(Combo3, 2000);
        }
      }
    }
  }
}

function Combo3(){
  var firstNotWild = [a3, b3, c3, d3, e3].find(num => num !== wild);
  var valid = new Set([wild, firstNotWild ?? wild]);
  if(valid.has(a3) && valid.has(b3)) {
    console.log("a3==b3");
    setTimeout(Combo4, 2000);
    if(valid.has(c3)) {
      console.log("b3==c3");
      setTimeout(Combo4, 2000);
      if(valid.has(d3)) {
        console.log("c3==d3");
        setTimeout(Combo4, 2000);
        if(valid.has(e3)) {
          console.log("d3==e3");
          console.log("All match.");
          setTimeout(Combo4, 2000);
        }
      }
    }
  }
}

function Combo4(){
console.log("finish combos");
Combo1();
}

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