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

Sem o retorno do objeto IDBDatabase

Boa tarde a todos!

Conforme a vídeo aula e sua transcrição, o seguinte comando no console do navegador:

ConnectionFactory.getConnection().then(connection => console.log(connection));

Nos retornar dois objetos, sendo eles: Promise e IDBDatabase. E é nessa parte que estou tendo dificuldade, pois somente objeto Promise que esta retornando. Logo consigo ter retorno do IDBDdatabase se eu fizer:

connection;

Outro ponto também é quando fecho a conexão, não lança a mensagem de erro. Segue abaixo:

File: ConnectionFactory.js

var ConnectionFactory = (function() {

    const stores = ['negociacoes'];
    const version = 2;
    const dbName = 'aluraframe';

    var connection = null;
    var close = null;

    return class ConnectionFactory {

        constructor() {
            throw new Error('Não é possível instanciar uma ConnectionFactory.');
        }

        static getConnection() {
            return new Promise((resolve, reject) => {
                let openRequest = window.indexedDB.open(dbName, version);

                openRequest.onupgradeneeded = e => {
                    ConnectionFactory._createStores(e.target.result);
                };

                openRequest.unsuccess = e => {
                    if(!connection) {
                        connection = e.target.result;
                        close = connection.close.bind(connection);
// Linha abaixo não está sendo lançada quando fecho a conexão
                        connection.close = function() {
                            throw new Error('Você não pode fechar diretamente a conexão.');
                        }
                    }
                    resolve(connection);
                };

                openRequest.unerror = e => {
                    console.log('Erro:' + e.target.error);
                    reject(e.target.error.name);
                };
            });
        }

        static _createStores(connection) {
            stores.forEach(store => {
                if(connection.objectStoreNames.contains(store)) 
                    connection.deleteObjectStore(store);

                connection.createObjectStore(store, { autoIncrement: true });
            });
        }

        static closeConnection() {
            if(connection) {
                close();
                connection = null;
            }
        }
    }
})();

File: aprendendo_indexeddb.html

var connection; 

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

        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);
5 respostas

O que aparece no console do navegador?

Apenas objeto do Promise como no vídeo do Prof.Flávio, não apresenta nenhum erro.

Tentou atualizar seu navegador ou tentar com outro navegador?

Sim, e testei em: Firefox, Opera e Chrome.

Sem sucesso.

solução!

Encontrei o erro, no arquivo ConnectionFactory.js digitei errado onde era pra ser onsuccess e onerror coloquei unsuccess e unerror.

Após corrigir isso, funcionou conforme a aula.