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

TypeError: Cannot read property 'transaction' of null

Erro apresentado no console.log:

NegociacaoDao.js:14 Uncaught (in promise) TypeError: Cannot read property 'transaction' of null at NegociacaoDao.js:14 at new Promise () at NegociacaoDao.adiciona (NegociacaoDao.js:11) at NegociacaoController.js:30 (anonymous) @ NegociacaoDao.js:14 adiciona @ NegociacaoDao.js:11 (anonymous) @ NegociacaoController.js:30 Promise.then (async) (anonymous) @ NegociacaoController.js:31 Promise.then (async) adiciona @ NegociacaoController.js:25 onsubmit @ (index):16

Código:

class NegociacaoDao {

constructor(connection) {

    this._connection = connection;
    this._store = 'negociacoes';
}

adiciona(negociacao) {

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

        let request = this._connection
            .transaction([this._store],"readwrite")
            .objectStore(this._store)
            .add(negociacao);

        request.onsuccess = (e) => {

            resolve();
        };

        request.onerror = e => {

            console.log(e.target.error);
            reject('Não foi possível adicionar a negociação');
        };                
    });
}

}

1 resposta
solução!

Oi Marcos!

O código da classe NegociacaoDAO parece estar correto, então creio que o problema esteja no NegociacaoController.

Pela mensagem de erro, a connection do objeto NegociacaoDAO não existe. Como ela é passada como parâmetro na instanciação do objeto, verifique se a variável connection está sendo devicamente passada na criação do objeto NegociacaoDAO no método adiciona no NegociacaoController.

    adiciona(event) {

        event.preventDefault();

        ConnectionFactory
            .getConnection()
            .then(connection => {

                let negociacao = this._criaNegociacao();

                new NegociacaoDao(connection) // <- aqui
                    .adiciona(negociacao)
                    .then(() => {
                        this._listaNegociacoes.adiciona(negociacao);
                        this._mensagem.texto = 'Negociação adicionada com sucesso'; 
                        this._limpaFormulario();                         
                    })
            })
            .catch(erro => this._mensagem.texto = erro);

    }

Tirando o connection dalí e rodando o código, consegui chegar no erro igual ao seu, então creio que o problema esteja aí.

Verifique se esta é a solução e se não for, poste o código do NegociacaoController aqui para que eu possa analisar.

Espero ter ajudado! Qualquer outra dúvida pode postar aqui!