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

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

Existe algum problema de fazer as condições do IF assim ? Vi que o instrutor preferiu separar em dois if's.


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

class HttpService {

    get(url) {

        return new Promise((resolve, reject) => {


            let xhr = new XMLHttpRequest();

            xhr.open('GET', url);

            xhr.onreadystatechange = () => {
//AQUI EMBAIXO ESTÁ A MUDANÇA
                 if(xhr.readyState == 4 && xhr.status == 200) {
                        resolve(JSON.parse(xhr.responseText));  
                    } else {
                        reject(xhr.responseText);
                    }

            };

            xhr.send();


        });
    }
2 respostas
solução!

No exemplo do professor (abaixo), ele preferiu separar pois quis tratar apenas as requisições finalizadas e com resposta pronta (readyState == 4). Onde, quando o status for OK (Status == 200) ele resolve e quando diferente disso ele rejeita.

if(xhr.readyState == 4) {

                    if(xhr.status == 200) {   

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

                        reject(xhr.responseText);
                    }
                }

No seu exemplo, ele vai dar rejeitar a cada iteração do onreadystatechange.

Caso seu código não tivesse o else (reject) ele funcionaria "adequadamente" porém não teria o tratamento do reject.

Deu para entender?

Da uma olhada no w3schools: https://www.w3schools.com/xml/ajax_xmlhttprequest_response.asp

Igor! Você foi mais rápido que eu, muito obrigado pela resposta dado ao Thiago!

Thiago, simplificar um código é uma tarefa que não acaba na vida do programador. Mas nesse caso isso lhe causaria problemas como o Igor apontou muito corretamente. Todavia, continue com essa sagacidade para simplificar o código sempre que possível!

Sucesso e bom estudo para ambos!