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

"objeto is not defined" módulo 03 (Realizando o parse da resposta)

Olá, tudo bem?

Seguir os passos do módulo 03 da aula 04 do curso "JavaScript Avançado II: ES6, orientação a objetos e padrões de projetos". Porém, este trecho de código:

JSON.parse(xhr.responseText).map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)).forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));

Está retornando "objeto is not defined" no método map() e, consequentemente, não está criando a lista de negociações.

Alguém enfrentou o mesmo problema? Se conseguirem me ajudar, agradeço!!!

8 respostas

Boa tarde, Gabriel! Como vai?

Ao fazer JSON.parse(xhr.responseText) qual é o resultado? Antes desse trecho de código que vc citou, faça um console.log(JSON.parse(xhr.responseText)) e cole o resultado aqui para que eu possa dar uma olhada, por favor!

Boa noite, Gabriel! Vou bem.

O resultado é:

"[{"data":"2019-06-19T11:18:34.593Z","quantidade":1,"valor":150},{"data":"2019-06-19T11:18:34.593Z","quantidade":2,"valor":250},{"data":"2019-06-19T11:18:34.593Z","quantidade":3,"valor":350}]"

Opa! Entendi!

Estranho, as coisas parecem estar em ordem! Vc poderia compartilhar o código completo no github e mandar o link aqui? Assim eu poderei dar uma olhada mais de perto no que está acontecendo!

Voltei!

Aqui está o link https://github.com/BiellBatista/Alura

Muito obrigado!

solução!

E aí Gabriel,

Fiz o download do projeto e rodei aqui, mas não consegui emular o erro que você mencionou, no entanto eu encontrei alguns outros erros que fazem com que a aplicação não funcione corratamente..

no arquivo NegociaçãoController.js no construtor você está fazendo isso:

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

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

Note que como último parâmetro você está passando um array, mas no construtor da classe Bind você não está recebendo um array e sim um paramêtro do tipo REST operator.

class Bind {
    constructor(model, view, ...props) {
       // código
    }
}

Neste caso você deve passar os parâmetros sem ser em forma de array e sim como se fosse um parâmetro normal, separado por vírgula.Ficando assim:

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

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

ou se não você pode passar como um array também, mas ai neste caso você deve colocar ... antes do array, ficando assim:

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

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

Espero ter ajudado, bons estudos :)

Fala aí Édson,

Muito obrigado pelas observações e ajudou bastante. Pelo incrível que pareça, após as modificações do último parâmetro, a aplicação importou as negociações!

E aí Gabriel, show de bola!

Dê uma olhada no módulo 4 da aula 3 deste curso, que o professor fala sobre o Rest operator. Título do módulo é Parâmetros REST.

Valeu Gabriel :)

Édson,

Verei sim, obrigado pela indicação e pela ajuda.

Agradeço a todos!