3
respostas

Porque foram usadas duas conexões?

Pelo que me parece estão sendo usadas duas connections para acessar o banco: connection e minhaConnection. O código ao qual me refiro pode ser visto aqui, como copiei do projeto baixado:

   var connection;

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

        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;
        };

Não compreendi porque foi usado minhaConnection dentro do onupgradeneeded e connection dentro do onsuccess. Testei o código sem esse detalhe e funcionou do mesmo jeito:

var connection;

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

        openRequest.onupgradeneeded = e => {

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

            connection = e.target.result;

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

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

        openRequest.onsuccess = e => {

            console.log('Conexão obtida com sucesso');

            connection = e.target.result;
        };

Alguém poderia me esclarecer porque foi feito dessa forma e quais seriam as vantagens de cada um desses approaches?

Obrigado.

3 respostas

Fala ai Murilo, tudo bem? Na verdade o minhaConnection não seria uma nova conexão, ele seria uma referência para o banco de dados em si, ou seja, um database.

Isso porque pode ser que seja necessário criar uma nova versão do banco de dados (por n motivos).

O seu código vai substituir a conexão pela nova versão do banco, dessa maneira, a conexão antiga seria perdida.

Talvez o nome da variável causou essa confusão.

Espero ter ajudado.

Olá Matheus, obrigado pela resposta.

Sinto em ser o arauto de más notícias, mas minha dúvida ainda não foi sanada. Demorei um tempo, estudando mais e mais, e acho que agora posso explaná-la melhor: Porque foram usadas duas referências diferentes ao banco?

Não me parece fazer sentido a necessidade de existirem duas referências ao mesmo banco dentro dos dois diferentes métodos: onsuccess e onupgradeneeded.

Peço perdão pelo incômodo e também por reavivar um tópico tão antigo, mas ainda continuo na dúvida e agradeço muito a disponibilidade a ajudar.

Abraços.

Fala Murillo, eu não estou vendo o código completo da classe que realize a conexão, mas, no código que você compartilhou ali em cima, em nenhum momento tem duas conexões.

O problema talvez esteja nas nomeclaturas, isso porque o e.target.result não vai te dar uma nova conexão e sim o acesso ao banco de dados.

E o banco de dados é diferente porque no onsuccess você vai ter o banco já pronto, no onupgradeneeded você vai ter o banco com a atualização já feita (nova versão).

A conexão em si é apenas uma.

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software