Se ele fica só parado é porque depois do else ele não muda o estado dele. O que deve-se fazer aqui é mudar o proxy utilizado pelo elemento da lista dentro do elas, para que, caso não esteja off também, possa entrar em algum dos outros ifs, caso contrario vai entrar novamente no mesmo else. É mais ou menos o mesmo princípio da recursão.
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
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.