2
respostas

TypeError: Cannot read property 'data' of undefined

Estou tomando esse erro na linha .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));

Voltei a instrução para Promise normal ... e roda.

2 respostas

Oi, Alexandre, tudo bem?

Você verificou como está declarada a propriedade data? O erro nos indica que ela não está definida, assim, não tem como ser lida. Faz uma varredura no código e onde a propriedade data comparando com o do instrutor. Pode colocar aqui também o seu código para que possamos te ajudar melhor :}

` class Negociacao {

constructor(data, quantidade, valor) {

    this._data = new Date(data.getTime());
    this._quantidade = quantidade;
    this._valor = valor;
    Object.freeze(this);
}

get volume() {

    return this._quantidade * this._valor;
}

get data() {

    return new Date(this._data.getTime());
}

get quantidade() {

    return this._quantidade;
}

get valor() {

    return this._valor;
}

}

class ListaNegociacoes {

constructor() {

    this._negociacoes = [];
}

adiciona(negociacao) {

    this._negociacoes.push(negociacao);
}

get negociacoes() {

    return [].concat(this._negociacoes);
}

esvazia() {

    this._negociacoes = [];
}

get volumeTotal() {
    return this._negociacoes.reduce((total, n) => total + n.volume, 0.0);
}

}

class NegociacaoController {

constructor() {

    let $ = document.querySelector.bind(document);

    this._inputData = $('#data');
    this._inputQuantidade = $('#quantidade');
    this._inputValor = $('#valor');

    this._listaNegociacoes = new Bind(
        new ListaNegociacoes(),
        new NegociacoesView($('#negociacoesView')),
        'adiciona', 'esvazia');

    this._mensagem = new Bind(
        new Mensagem(), new MensagemView($('#mensagemView')),
        'texto');
}

adiciona(event) {

    event.preventDefault();
    this._listaNegociacoes.adiciona(this._criaNegociacao());
    this._mensagem.texto = 'Negociação adicionada com sucesso';
    this._limpaFormulario();
}

apaga() {

    this._listaNegociacoes.esvazia();
    this._mensagem.texto = 'Negociações apagadas com sucesso';
}

_criaNegociacao() {

    return new Negociacao(
        DateHelper.textoParaData(this._inputData.value),
        this._inputQuantidade.value,
        this._inputValor.value);
}

_limpaFormulario() {

    this._inputData.value = '';
    this._inputQuantidade.value = 1;
    this._inputValor.value = 0.0;
    this._inputData.focus();
}

importaNegociacoes() {

    let service = new NegociacaoService();

    Promise.all([,
        service.obterNegociacoesDaSemana(),
        service.obterNegociacoesDaSemanaAnterior(),
        service.obterNegociacoesDaSemanaRetrasada()]
        ).then(negociacoes => {
            //console.log(negociacoes);
            negociacoes
                .reduce((arrayachatado, array) => arrayachatado.concat(array), [])
                .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));                    
                this._mensagem.texto = 'Negociações importadas com sucesso';

        })
        .catch (error => console.log(error));
        //.catch(error => this._mensagem.texto = error);


    }

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