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

Exibindo todas as negociações

Não estou conseguindo exibir todas as negociações. Segui o vídeo e também segui a transcrição, mas nada feito. Não recebo nenhum erro no console do navegador, e consigo inserir uma nova negociação no banco sem problemas. No entanto, quando chego no final da atividade 03 da aula 03, minhas negociações não são exibidas.

No arquivo NegociacaoDao, criei o método listaTodos, da seguinte forma:

    listaTodos() {

        return new Promise((resolve, reject) => {

            let cursor = this._connection
                .transaction([this._store],'readwrite')
                .objectStore(this._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 {

                resolve(negociacoes);
            }
        }

        cursor.onerror = e => {

            console.log(e.target.error);
            reject('Não foi possível listar as negociações');
        }
    }

E no NegociacaoController, coloquei o ConnectionFactory dentro do constructor:

        ConnectionFactory
            .getConnection()
            .then(connection => new NegociacaoDao(connection))
            .then(dao => dao.listaTodos())
            .then(negociacoes =>
                negociacoes.forEach(negociacao => 
                this._listaNegociacoes.adiciona(negociacao)));
3 respostas
solução!

Olá! Já identifiquei o problema. Veja este trecho de código:

    listaTodos() {

        return new Promise((resolve, reject) => {

            let cursor = this._connection
                .transaction([this._store],'readwrite')
                .objectStore(this._store)
                .openCursor();
        }); // não deveria estar aqui!

Você fechou a Promise logo no início e todo o código que vai no banco a procura dos dados é ignorada.

Consegue enxergar? Basta mover o restante para dentro da Promise que tudo funcionará conforme esperado.

Seu código deve estar assim:

    listaTodos() {

        return new Promise((resolve, reject) => {

            let cursor = this._connection
                .transaction([this._store],'readwrite')
                .objectStore(this._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 {

                    resolve(negociacoes);
                }
            }

            cursor.onerror = e => {

                console.log(e.target.error);
                reject('Não foi possível listar as negociações');
            }

        }); // fim da promise
 }; // fim listaTodos

Putzzzzz não acredito! hahaha

Mas mesmo assim, que honra poder contar com sua ajuda Flávio!!

Grande abraço, e obrigado!

Honra minha de ajudar mais um Cangaceiro JavaScript! O bando cresce cada vez mais.

Sucesso e bom estudo Marcelo!