2
respostas

Erro ao executar o Adiciona

Estou recebendo uma mensagem de erro quando tento executar o adiciona().

aprendendo_indexeddb.html:45 Uncaught ReferenceError: Negociacao is not defined
    at adiciona (aprendendo_indexeddb.html:45)
    at <anonymous>:1:1

Meu código:

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Aprendendo Indexed DB</title>
</head>
<body>
    <script scr="js/app/models/Negociacao.js"></script>
    <script>

        var connection;

        var openRequest = window.indexedDB.open('aluraframe',5);

        openRequest.onupgradeneeded = e => {

            console.log('Cria ou altera um banco já existente');

            let minhaConnection = e.target.result;

            if (minhaConnection.objectStoreNames.contains('negociacoes')) {
                minhaConnection.deleteObjectStore('negociacoes');
            }

            minhaConnection.createObjectStore('negociacoes', { autoIncrement: true});

        };


        openRequest.onsuccess = e => {
            console.log('Conexão obtida com sucesso');
            connection = e.target.result;
        };


        openRequest.onerror = e => {
            console.log(e.target.error() );
        };

        function adiciona() {
            let transaction = connection.transaction(['negociacoes'],'readwrite');

            let store = transaction.objectStore('negociacoes');

            let negociacao = new Negociacao(new Date(), 1, 200);

            let request =  store.add(negociacao);

            request.onsuccess = e => {
                console.log('Negociação incluída com sucesso');
            };

            request.onerror = e => {
                console.log('Não foi possível adicionar a Negociação ');
            };

        }

        function listaTodos() {

            let transaction = connection.transaction(['negociacoes'],'readwrite');

            let store = transaction.objectStore('negociacoes');

            let cursor = store.openCursor();

            let negociacoes = [];

            cursor.onsuccess = e => {

                let atual = e.target.result;

                if (atual) {
                    let dado = atual.value;

                    negociacoes.push(new Negociacao(dado._data, dado._quantidade, dado._valor));

                    atual.continue();
                } else {

                    console.log(negociacoes);
                }
            };

            cursor.onerror = e => {
                console.log(e.target.error.name);
            };

        }



    </script>
</body>
</html>
2 respostas

Oi, Helder, tudo bem?

Esse erro que você está recebendo nos diz que você tentar acessar uma função da qual não foi definida, ou pode estar conflitando com alguma outra ou você não atribuiu um valor a ele. Vejo que o seu código está de acordo com o instrutor. Você poderia colcoar aqui o seu código relativo ao js/app/models/Negociacao.js para podermos insvestigar melhor o que está acontecendo.

Segue o código..

class Negociacao {

    constructor(data, quantidade, valor) {
        this._data = new Date(data.getTime()); // cria um novo objeto porque se o que foi passado foi um objeto ele seria acessível fora da classe
        this._quantidade = quantidade;
        this._valor = valor;
        Object.freeze(this); // não impede qua eu possa alterar as propriedades de um campo objeto como o tipo Data;
    }

    get volume() {
        return this._quantidade * this._valor;
    }

    get data() {
        return new Date(this._data.getTime()); // programação defensiva para evitar que o objeto possa ser alterado pelas suas propriedades
    }

    get quantidade() {
        return this._quantidade;
    }

    get valor() {
        return this._valor;
    }

}