2
respostas

Erro ao adicionar Negociação

toda vez que eu vou adicionar uma nova negociação aparece o seguinte erro!

Uncaught TypeError: Cannot read property 'cadastra' of undefined
    at NegociacaoController.adiciona (NegociacaoController.js:49)
    at HTMLFormElement.onsubmit ((index):17)
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' , 'ordena', 'inverteOrdem');

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

        this._ordemAtual = '';

        setInterval(() => {
            this.importaNegociacoes();
        }, 5000)

        this._init();
    }

    _init(){
        ConnectionFactory
            .getConnection()
            .then(connection => new NegociacaoDao(connection))
            .then(dao => dao.listaTodos())
            .then(negociacoes => 
                negociacoes.forEach(negociacao => 
                    this._listaNegociacoes.adiciona(negociacao)))
            .catch(erro => {
                console.log(erro);
                this._mensagem.texto = erro;
            });      
    }

    adiciona(event) {

        event.preventDefault();

        let negociacao = this._criaNegociacao();

        this._negociacaoService.cadastra(negociacao)
            .then(mensagem => {
                this._listaNegociacoes.adiciona(negociacao);
                this._mensagem.texto = mensagem; 
                this._limpaFormulario();  
            }).catch(erro => this._mensagem.texto = erro);
    }
}
class NegociacaoService {

    constructor() {

        this._http = new HttpService();
    }

    cadastra(negociacao) {
        return ConnectionFactory
           .getConnection()
           .then(conexao => new NegociacaoDao(conexao))
           .then(dao => dao.adiciona(negociacao))
           .then(() => 'Negociação cadastrada com sucesso')
           .catch(erro => {
               throw new Error("Não foi possível adicionar a negociação")
           });
   }
}
2 respostas

Oi Alexander,

Este erro ocorre porque sua propriedade _negociacaoService não foi inicializada em nenhum lugar dentro da classe NegociacaoController.

Você pode resolver de duas formas:

  • Inicializar a propriedade _negociacaoService no construtor da classe NegociacaoController;

ou

  • Instanciar diretamente um NegociacaoService dentro do método adiciona da classe NegociacaoController.

Qualquer dúvida só falar!

Abraço!

So para reforça o que a Jovana disse, a segunda sugestão ficaria :

new NegociacaoService()

adiciona(event) {

        event.preventDefault();

        let negociacao = this._criaNegociacao();

         new NegociacaoService()
            .cadastra(negociacao)
            .then((mensagem) => {
                console.log(mensagem);
                console.log(negociacao);
                this._listaNegociacoes.adiciona(negociacao);
                this._mensagem.texto = mensagem;
                this._limpaDados();
                this._inputData.focus();
            })
            .catch(erro => this._mensagem.texto = erro);
    }