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

A forma que você apresentou a dúvida ficou um pouco confusa. O que consegui entender:
Você quer que, ao ser disparado um erro na aplicação que não seja o 'Not Found', o índice não seja incrementado e o teste seja refeito com outro proxy.

Neste caso, o próprio código de exemplo que apresentou não seria a resposta para o seu questionamento? Pois se o erro for diferente do caso de ser 'Not Found' irá caír na clausula else que, por sua vez, não tem nenhum incremento do índice.

Assim, dentro do else você poderia mudar o proxy e retestar na próxima iteração. Como não ouve incremento no índice, ele se manteve com o mesmo valor, caso o erro persista não irá para o próximo elemento da lista de testes até que receba um status Ok ou um Not Found.

Carregando publicação patrocinada...
1

não pois os incrementos não estão funcionando dentro dos if, só roda se o codigo for assim:

while(i < lenght){
if (res.statusMessage == "OK"){
console.log('deu certo');
}
else if(res.statusMessage == "Not Found"){
console.log('deu errado');
}else {
console.log('erro generico onde não foi possivel realizar o teste');
}
i++; <-- com o incremento aqui fora das condicionais
}

no codigo da duvida ele não faz nada fica só "parado"

1

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.

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

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.