Executando verificação de segurança...
1

então, no caso que citei dele ficar parado eu não estava utilizando os proxies ainda, estava fazendo o teste sem, então ele nunca chegava a cair no else

Carregando publicação patrocinada...
2

Vou te dar um exemplo para entender o que aconteceu. Um dos casos clássicos para a recursão é o cálculo do fatorial, que também pode ser calculado utilizando laços de repetição, mas eu vou mostrar com recursão porque é mais prático.

Um fatorial de um número, denotado por n!, é o produtório n * (n-1) * (n-2) * ... * (n-m), até que (n-m) = 0. Como por exemplo : 3! = 3 * 2 * 1 = 6.
O cálculo do fatorial na programação é muito parecido com o que você quer fazer:

function fatorial(n) {
    if (n === 0)
        return 1
    else 
        return n * fatorial(n - 1)
}

Veja que temos um caso padrão, que é quando n === 0, assim como você tem dois casos, um onde o status é Ok e outro onde é Not Found. Veja que, caso o else retorne apenas n, o programa irá chamar infinitamente (até o processo usar toda a memória disponível) sem nunca satisfazer a condição, por isso no else é trocado o estado da variável, isto é, o seu valor.

Para que no seu caso o programa não fique sempre parado, você deve alterar alguma coisa dentro do else, de forma que seja possível satisfazer os casos padrões, destravando o programa. No seu caso seria setar um novo proxy para o teste, deste modo, caso não ele também não esteja off o programa seguirá normalmente sem que fique preso dentro do laço.

Uma coisa que você deve ter atenção: é saudável que estipule um número máximo de retrys dentro dos seus testes, porque é possível que todos os proxys estejam off no momento do teste, se isso ocorrer o programa ficará preso no laço de repetição indefinidamente, o que pode causar mais erros.