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

Mesma conexão ou não?

Professor onde você visualizou no console do Chrome que se tratava de uma mesma conexão ou uma conexão diferente?

var stores = ["negociacoes"];
var version = 1;
var dbName = "aluraframe";

class ConnectionFactory {

    constructor() {
        throw new Error("Não é possível criar instâncias de ConnectionFactory!");
    }

    static getConnection() {

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

            let openRequest = window.indexedDB.open(dbName, version);

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

            openRequest.onsuccess = e => {
                resolve(e.target.result);
            };

            openRequest.onerror = e => {
                console.log(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});
        });        
    }
}
6 respostas

Stanislaw da Cruz Pereira , não entendi bem sua pergunta, me manda em qual momento do vídeo surgiu essa dúvida por favor? \o/

Vamos lá, na aula 2, vídeo 3 (Criando Stores) do curso JavaScript Avançado III, tem um momento do vídeo exatamente aos 6:40 min => O professor explica a cada vez que ele chama getConnection cria uma nova conexão. No vídeo seguinte o 4 (O padrão de projeto Module Pattern), após as alterações necessárias ele faz o mesmo teste aos 2:00 min e diz que se trata da mesma conexão.

A PERGUNTA: Como ele identifica no console do Chrome que são conexões iguais ou conexões diferentes? Não vi nenhuma diferença aqui à nível de console, nem soube identificar se são diferentes conexões ou não. Essa explicação não ficou muito clara no vídeo.

Também tive a mesmíssima dúvida. Inclusive na aula seguinte, depois de alterar a Factory para retornar sempre a mesma instância da conexão, ele repete o mesmo teste, logando a conexão criada no console, e obtém exatamente o mesmo resultado textual, mas dessa vez ele diz que agora é sempre a mesma conexão.

Entendi que ele diz que antes era uma conexão nova a cada chamada e depois da refatoração era sempre a mesma conexão pelo raciocínio de como funciona o código, antes e depois da alteração, e não pelo que é exibido no console. O porém é que o vídeo acaba dando a entender que tem alguma evidência textual no resultado dos testes que comprova o raciocínio do professor, quando eu acredito que não há.

Outra dúvida relacionada: na refatoração, ele acaba chamando o openRequest. Então na verdade ele não está criando uma nova conexão na segunda chamada do getConnection, mas descartando a conexão recém-criada e retornando a que foi armazenada na variável global ?

Dessa forma, não estaríamos tendo o ganho de se evitar o custo da criação de nova conexão, que é o que normalmente se procura evitar no mundo Java, onde é sabido que o custo de criação de nova conexão com banco de dados é alto.

solução!

Fiz um teste no console que comprova que agora sempre a mesma conexão é retornada (dúvida original do Stanislaw):

ConnectionFactory.getConnection().then(connection => {this.c1=connection})

ConnectionFactory.getConnection().then(connection => {this.c2=connection})

this.c1===this.c2

O último comando vai retornar false antes da refatoração e true depois, porque no último caso as duas referências são para o mesmo objeto.

Obrigado pelo esclarecimento