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

o onreadystatechange é realmente necessário?

Olá a todos!

Eu tenho uma forma muito particular de estudo que é: vejo do que se trata o tema, tento realizar a implementação da minha forma, antes de ver a aula e depois assisto a aula para tirar duvidas e conferir o meu resultado.

Dessa forma eu fiz a implementação da requisição Ajax de uma forma diferente, sem utilizar o onreadystatechange. Eu sei que pode existir diversas formas de chegar ao mesmo resultado, mas como eu não tenho muito experiência com essas requisições sem usar um framework pra me auxiliar, eu gostaria de saber se da forma abaixa pode ser aplicada, ou se tem algum problema:

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

            xhr.open('GET', 'negociacoes/semana');

            xhr.addEventListener('loadend', () => {
                if (xhr.status == 200) {
                    resolve(JSON.parse(xhr.responseText)
                        .map(obj =>
                            new Negociacao(
                                new Date(obj.data),
                                obj.quantidade,
                                obj.valor
                            )
                        ));
                } else {
                    console.log(xhr.responseText);
                    reject("Não foi possível obter as negociações do servidor.");
                }
            });
            xhr.send();
        });
    }

Ao invés de utilizar o onreadystatechange eu adicionei um eventListener no evento loadend. Funcionou, mas tem alguma parte fundamental que eu estou perdendo com essa implementação, ou mesmo ganhando?

2 respostas
solução!

Bom dia.

Só fique ligado que o 'loadend' será disparado para sucesso, erro, requisição abordada e por ai vai, ou seja, você não tem controle sobre qual etapa da requisição você esta. Se ter esse conhecimento é importante para você, o loadend não o ajudará.

Se houve um erro, você só capturará um erro vindo do servidor através do status e não conseguirá lidar com outro erro que possa ter acontecido no client.

Ele é mais usado para você executar um código que você quer sempre processar independente do que aconteceu com o programa.

Se você programa em Java, é como se fosse um finaly da instrução try e catch.

Opa Flavio!

Entendi perfeitamente a situação.

A priori, quando tentei realizar a implementação sem ver a explicação, nunca tentaria usar o onreadystatechange por parecer muito abstrato, mas com a explicação acima tudo ficou mais claro.

Valeu! =D