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

TypeError: Cannot read property 'getDate' of undefined

Está aparecendo esse erro pra mim, porém não é no console e sim no alert que aparece ao completar uma ação.

TypeError: Cannot read property 'getDate' of undefined

Me parece que o erro está nesse trecho de código da classe "NegociacaoService.js"

getNegociacaoSemana() {
        return new Promise((resolve, reject) => {
            this._http
                .get('negociacoes/semana')
                .then(negociacoes => {
                    resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)));
                })
                .catch(err => {
                    console.log(err);
                    reject('Não foi possível obter as negociações da semana!');
                })
        });
    }

eu copiei e colei esse trecho do código direto da transcrição pra ver se funcionava, mas continuou dando erro, eu só mudei os nomes dos métodos pra ficarem menores, quando eu mudo a url pra uma que seja errada, no alert aparece o que está dentro do reject, se eu concerto a url da o erro no titulo desse tópico, isso aconteceu depois de implementar o Promisse.all, nas duas ocasiões nada aparece na tabela.

Alguém pode me ajudar?

7 respostas

Oi Lucas tudo bem?

Poderia, por gentileza, colocar a pasta do seu projeto no github? Assim posso analisar melhor o que está acontecendo.

Boa noite, Lucas! Como vai?

Como o próprio log de erro diz, vc está tentando invocar o método getDate() de alguém que está indefinido! Como no trecho de código que vc postou em nenhum momento é invocado o método getDate(), então o erro certamente não está aí!

Onde vc pegou esse log de erro não é mostrado também o arquivo e a linha onde o problema ocorre? Em caso positivo, vc poderia postar aqui o log de erro completo? Outra coisa, vc disse que o erro não é mostrado no console, mas no console é apresentado algo?

Com essas informações ficará mais fácil de te ajudar de forma efetiva!

Boa tarde Gabriel, eu continue com o curso e ignorei o erro por um tempo, agora apareceu outro erro, mas de novo não foi no console e sim no alerta.

Apareceu esse erro agora.

TypeError: Cannot read property 'data' of undefined

Porém sempre aparece um erro no console de um arquivo que deve estar na pasta server em algum arquivo.

Uncaught TypeError: imgs.imgSRC_o.replace is not a function
    at Object.getImages (content.js:34)
    at Object.find (content.js:47)
    at m_over (content.js:113)

Eu resolvi apagar a pasta server e fazer o download de novo pra ver se sumia o problema e ainda continua a mesma coisa, ele não aparece imediatamente no console, só quando realizo alguma ação, como importar as negociações, tenho mais dois problemas no meu projeto que devem estar relacionados ao TypeError.

1º : na coluna "DATA", as datas aparecem assim, 0.00021226915729144553

2º : quando importo as negociações, só aparecem 3, não aparecem as negociações restantes.

Aqui está minha classe NegociaçãoService e toda a classe NegociaçãoController: Link

solução!

Lucas, boa tarde

A questão de aparecer somente 3 negociações quando você faz a importação, é por que nos métodos getNegociacaoSemanaPassada e getNegociacaoSemanaRetrasada você não está dando o return.

Você deve colocar o return para dar certo, veja o método getNegociacaoSema lá você está fazendo certo.

Esses dois métodos devem ficar assim:

getNegociacaoSemanaPassada() {

    return this._http
    .get('http://localhost:3000/negociacoes/anterior')
    .then(negociacoes => {
        return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor));
    })
     .catch(err => {
        console.log(err);
        throw new Error('Não foi possível obter as negociações da semana passada!');
    });
}

getNegociacaoSemanaRetrasada() {
    return this._http
            .get('http://localhost:3000/negociacoes/retrasada')
            .then(negociacoes => {
                return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor));
            })
            .catch(err => {
                console.log(err);
                throw new Error('Não foi possível obter as negociações da semana retrasada!');
            });
    }
}

A questão da data para mim está mostrando certinho, caso fazendo essas alterações continue mostrando a data de forma errada, seria bom você disponibilizar todo seu projeto no git.

não tinha notado esse erro no meu código, botei os return no código e está mostrando todas as negociações agora, porém a data ainda tá zoada.

Fiz o upload dos códigos aqui.

Então Lucas, o problema está no seu método formataData do arquivo DateHelper, vocÊ está formatando a data com template string, que é o mais elegante, mas o formato está errado.

Olha só a maneira que você está fazendo:

static formataData(data) {
    // note que você está abrindo a template string no começo e antes da  barra (/) você está fechando, e depois da barra você está abrindo e fechando antes da próxima barra
    return `${data.getDate()}`
    / `${data.getMonth() + 1}`
    / `${data.getFullYear()}`
    }

Eu coloquei um comentário no código ali para você tentar entender o problema. Note que você está fazendo:

`${data.getDate()}` / `${data.getMonth() + 1}` / `data.getFullYear()`;

Você abre e fecha a template string antes de cada barra (/). O que acontece é que ele ta pegando o valor que gera dessa template string e dividindo pelo valor da frente. Neste caso está ficando assim: Neste exemplo usei a data: 07/12/2018.

7/12/2018 -> ele ta fazendo 7 dividir por 12 e o resultado dessa divisão fazer dividido por 2018, por isso que da aquele número enorme e doido que você está vendo.

para dar certo, você precisa abrir a template string no começo e fechar só no final, ficando dessa maneira:

static formataData(data) {
    return `${data.getDate()}/${data.getMonth() + 1}/${data.getFullYear()}`
}

Note que eu abro a template string logo depois do return e fecho somente no final, e toda operação e valor que quero pegar de uma variavel ou método eu coloco dentro de um ${}.

Concertei aqui, não tinha percebido esse pequeno erro, vlw Édson, tá tudo direitinho aqui.