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!