Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Importação || problema com a data

toda vez que eu importo alguma negociação, ele vem com a data da importação e não com a data original da negociação.

class NegociacaoService{

    obterNegociacoes(callback){

        let xhr = new XMLHttpRequest();
        xhr.open('GET', 'negociacoes/semana');
        xhr.onreadystatechange = () => { 
            if(xhr.status == 200) {
                callback(null, JSON.parse(xhr.responseText)
                .map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));
            } else {
                console.log(xhr.responseText);
                callback('Não foi possivel obter as associações', null)
            }
        };
        xhr.send();
    }

NegociacaoController

importaNegociacoes() {
        let service = new NegociacaoService();
        service.obterNegociacoes((err, negociacoes)=>{
            if(err) {
                this._mensagem.texto = err;
                return;
            }
            negociacoes.forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
            this._mensagem.texto = 'Negociacôes importadas !';
        });
    }

e também vem dando esse erro no console do navegador:

Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.xhr.onreadystatechange (NegociacaoService.js:9)

a linha mencionada no problema seria essa:

callback(null, JSON.parse(xhr.responseText)
1 resposta
solução!

Seu código esta diferente do que eu abordo na aula. Em nenhum momento você verifica se o xhr.readyState é 4! Como você não verifica, ele pega qualquer resposta que não seja dessa etapa e tenta realizar o parse com JSON.parse((xhr.responseText) resultando no erro "Uncaught SyntaxError: Unexpected end of JSON input".

Seu código corrigido fica assim:

class NegociacaoService {

    obterNegociacoes(callback) {

        let xhr = new XMLHttpRequest();
        xhr.open('GET', 'negociacoes/semana');
        xhr.onreadystatechange = () => {

            if (xhr.readyState == 4) { // ESQUECEU AQUI!
                if (xhr.status == 200) {
                    callback(null, JSON.parse(xhr.responseText)
                        .map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));
                } else {
                    console.log(xhr.responseText);
                    callback('Não foi possivel obter as associações', null)
                }
            }
        };
        xhr.send();
    }
}

Porém, se não me engano, o nome do método é obterNegociacoesDaSemana. Não há problema mudar o nome, mas terá que manter a consistência em todos os lugares que for referenciar o novo do método.

Sucesso e bom estudo meu aluno.