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

'getConnection' of undefined na função anonima ConnectionFactory

Código da classe

// projeto Module Pattern
// encapsula a logica
var ConnectionFactory = (function () {

    var stores = ['negociacoes'];
    var version = 5;
    var dbname = 'aluraframe'
    var connection = null;

    class ConnectionFactory {
        constructor() {
            throw new Error("Não é possivel criar essa instancia");
        }

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

                openRequest.onupgradeneeded = e => {
                    this._createStores(e.target.result);
                };
                openRequest.onsuccess = (e) => {
                    if (!connection) {
                        connection = e.target.result;
                        connection.close = function () {
                            throw new Error('Você não pode fechar diretamente a conexão');
                        };
                    }
                    resolve(connection);
                };
                openRequest.onerror = (e) => {
                    reject(e.target.error.name);
                };
            });
        }
        static _createStores(conexao) {
            stores.forEach(store => {
                if (conexao.objectStoreNames.contains(store))
                    conexao.deleteObjectStore(store);

                e.target.result.createObjectStore(store, {
                    autoIncrement: true
                });
            });
        }

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

Erro obtido com a execução no console... (eu importei ele no index)

ConnectionFactory.getConnection().then(connection => connection.close()); VM132:1 Uncaught TypeError: Cannot read property 'getConnection' of undefined at :1:19

1 resposta
solução!

Oi Marcos,

a variável ConnectionFactory está com valor undefined. O que acontece é que sua IIFE não retorna nada, mas deveria retornar a class ConnectionFactory.

O código ficaria assim:

// projeto Module Pattern
// encapsula a logica
var ConnectionFactory = (function () {

    var stores = ['negociacoes'];
    var version = 5;
    var dbname = 'aluraframe'
    var connection = null;

    return class ConnectionFactory {
        constructor() {
            throw new Error("Não é possivel criar essa instancia");
        }

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

                openRequest.onupgradeneeded = e => {
                    this._createStores(e.target.result);
                };
                openRequest.onsuccess = (e) => {
                    if (!connection) {
                        connection = e.target.result;
                        connection.close = function () {
                            throw new Error('Você não pode fechar diretamente a conexão');
                        };
                    }
                    resolve(connection);
                };
                openRequest.onerror = (e) => {
                    reject(e.target.error.name);
                };
            });
        }
        static _createStores(conexao) {
            stores.forEach(store => {
                if (conexao.objectStoreNames.contains(store))
                    conexao.deleteObjectStore(store);

                e.target.result.createObjectStore(store, {
                    autoIncrement: true
                });
            });
        }

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