Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

if no POST ou GET

Olá Humanos,

Enquanto assistia a aula que implementávamos get, me surgiu uma dúvida, e aqui estou, porque a dúvida surgiu novamente agora que estamos implementando o post. Eu até tentei implementar minha solução enquanto fazia o exercício que o Flávio propôs ( para implementarmos o post), mas eu vi que não funcionou. Mesmo as duas condições estando true, ele executou o else que seria o cenário false. Basicamente eu gostaria de saber por qual motivo o código quebra se implementamos duas condições dentro do if, ao invés de dois ifs.

DEU CERTO

 get(url){

        return new Promise((resolve, reject) => {
            let xhr = new XMLHttpRequest();

            xhr.open('GET', url);

            xhr.onreadystatechange = () => {

                if(xhr.readyState == 4) {
                    if(xhr.status == 200) {

                        resolve(JSON.parse(xhr.responseText))  
                    } else {
                        reject(xhr.responseText);
                    }
                }
            };
            xhr.send();
        });
    }

DEU ERRADO

 get(url){

        return new Promise((resolve, reject) => {
            let xhr = new XMLHttpRequest();

            xhr.open('GET', url);

            xhr.onreadystatechange = () => {

                if(xhr.readyState == 4 && xhr.status == 200) {
                        resolve(JSON.parse(xhr.responseText))  
                    } else {
                        reject(xhr.responseText);
                    }
            };
            xhr.send();
        });
    }

A minha dúvida é apenas sobre porquê quando os ifs estão aninhados fucinona mas quando duas condições estão dentro do mesmo if quebra. Tem algo com a tabela verdade?

Agradeço desde já.

2 respostas
solução!

Oi Gabriela!

Isso aconteceu provavelmente pois na hora que o xhr.readyState tivesse um valor igual a 4, o xhr.status ainda não tinha retornado um status igual a 200, fazendo com que não entrasse na verificação desejada. A primeira solução deu certo pois primeiro ele verificou se o xhr.readyState era igual a 4, apenas depois para verificar se o xhr.status era 200. Por esse motivo funcionou, já que as duas condições não estavam sendo feitas simultaneamente, como no primeiro exemplo.

Espero ter ajudado!

Perfeito Giovanna, faz sentido. Obrigada!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software