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

TypeError: Cannot read property 'forEach' of undefined

Olá, Após tentar reproduzir o código dessa parte e ver algumas soluções nesse fórum, o código compila, porém não funciona ao clicar no botão Importar Dados, exibindo o Erro "TypeError: Cannot read property 'forEach' of undefined" no console.

Os meus códigos:

export class NegociacaoService {
    obterNegociacoes(handler: Function): Promise<void | Negociacao[]> {

        return fetch('http://localhost:8080/dados')
        .then(resp => handler(resp))
        .then(resp => resp.json())
        .then((dados: NegociacaoParcial[]) => {
            dados
                .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))
        })
        .catch(err => console.log(err));

    }
}

No NegociacaoController:

 @throttle()
    importaDados(){
        function isOk(resp: Response){
            if(resp.ok){
                return resp;
            } else {
                throw new Error(resp.statusText);
            }
        }

        this._service
            .obterNegociacoes(isOk)
            .then((negociacoes: Negociacao[]) => {
                negociacoes.forEach(negociacao => 
                    this._negociacoes.adiciona(negociacao));
                this._negociacoesView.update(this._negociacoes);
            });

    }

E e o erro no console:

NegociacaoController.js:62 Uncaught (in promise) TypeError: Cannot read property 'forEach' of undefined
    at eval (NegociacaoController.js:62)
1 resposta
solução!

Fala ai Kelvin, tudo bem? Acho que o problema está na linha 62 do seu NegociacaoController:

negociacoes.forEach

Parece que negociacoes, ou seja, sua Promise não está retornando algum valor.

Acredito que o problema seja o último .then da obterNegociacoes, veja:

.then((dados: NegociacaoParcial[]) => {
            dados
                .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))
        })

Você não está retornando nada nessa função, então quem chamá-la irá receber um undefined como parâmetro do .then.

Tente remover o body da arrow function:

.then((dados: NegociacaoParcial[]) =>
            dados
                .map(dado => new Negociacao(new Date(), dado.vezes, dado.montante))
        )

Acho que deve resolver.

Espero ter ajudado.

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