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

NegociacaoController.js:61 Uncaught TypeError: Cannot read property 'adiciona' of undefined

O metodo existe e eu uso ele no metodo adiciona do controller, estranho... e quando edu tiro o this da instancia listaNegociacoes ele da erro, entao ele esta achando o lista, mas por alguym motivo nao ta achando o metodo adiciona alguem sabe o por que do erro?

NegociacaoController.js:61 Uncaught TypeError: Cannot read property 'adiciona' of undefined at JSON.parse.map.forEach.negociacao (NegociacaoController.js:61) at Array.forEach () at XMLHttpRequest.xhr.onreadystatechange (NegociacaoController.js:61)

importaNegociacoes() { let xhr = new XMLHttpRequest();

    xhr.open('GET', 'negociacoes/semana');
    xhr.onreadystatechange = function () {

        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                JSON.parse(xhr.responseText)
                    .map(object => new Negociacao(new Date(object.data), object.quantidade, object.valor))
                    .forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
                    this._mensagem.texto = 'Negociações importadas com sucesso.';

            } else {
                console.log(xhr.responseText);
                this._mensagem.texto = 'Não foi possivel obter as negociacoes da semana'
                +'do servidor: status code ', xhr.status
            }
        }
    }

    xhr.send();

}
4 respostas

huuuum mudei pra arrow funcction e funcionou, provavelmente ele estava mantendo o this do escopo anterior nao do controller

solução!

Fala aí Hudson, beleza? Esse problema foi por questões de escopo:

Arrow Functions: Mantém o escopo de onde foram criadas, ou seja, no seu caso se elas estão dentro da classe NegociacaoController, o this será a própria classe.

Functions: Mantém o escopo de onde foram executadas, então, o seu this vai depender de onde e quem executou a função.

Espero ter ajudado.

ajudou sim muito obrigado !

Magina, precisando não deixe de criar suas dúvidas.