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

[Duvida]Como fazer o incremento do indice de uma repetição WHILE dentro de um condicional "IF" em NODEJS ?

A logica que estou tentando aplica usando NODEJS é a seguinte, estou desenvolvendo um programa que ira testar se o usuario é cadastrado no site e será usado proxies
então tem 3 possiveis resultados para minha requisição, e somente em 2 quero que incremente o indice do while

  • Autenticado -> deve incrementar
  • Usuario não encontrado -> deve incrementar
  • Erro devido a conexão do proxy -> não deve incrementar para que seja refeito o teste com o mesmo item do array utilizando outro proxy

Porém não funciona, o codigo não executa nem o request nem nada, ele entra no while e para não executa nem o request (sei disso pq cheguei a por um console.log antes do request ele executou)

var i = 0;

while(i < array.lenght){
request((res) =>{
if(res == "Autenticado"){
console.log("Autenticado");
i++
}
else if(res == "Usuario não encontrado"){
console.log("Usuario não encontrado");
i++
}else{console.log("Erro por conta de proxy")}
}
}

Carregando publicação patrocinada...
1

Pelo que entendi, ta super confuso o que vc quer fazer!

O que entendi:
Dado um array de dados

Usando um loop(while) você quer verificar se o status é "OK" ou "not Found"

Se for Ok o incrementador será incrementado!
E passa para o proxima posição do array.

Se der erro(não importa o erro)
O incrementador não será incrementado
Ira retestar na mesma posição do array

Se der erro testa de novo e denovo e denovo até o resultado ser "ok"

Assim o incrementador será incrementado
Passando pra a proxima posição do array?

é isso?

Seu código ta mostrando no "not found" o incrementador sendo incrementado.

else if(res.statusMessage == "Not Found"){
console.log('deu errado');
i++
}else

Ai não entendi

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.

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.