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

'transaction' of undefined

Alguem poderia me ajudar nao estou conseguindo achar o problema com meu codigo.

Uncaught TypeError: Cannot read property 'transaction' of undefined(…)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Aprendendo Indexed DB</title>
</head>
<body>
  <script src="js/app/models/Negociacao.js"></script>
  <script>
    var connection;
    var openRequest = window.indexedDB.open("aluraframe",4);

   openRequest.onupgradeneeded = e => {
      //cria ou altera um banco existente
      console.log("cria bando aluraframe");
      let minhaConnection = e.target.result;

      if(minhaConnection.objectStoreNames.contains('negociacoes')) {
          minhaConnection.deleteObjectStore('negociacoes');
          console.log('Apagou o banco')
      }

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

    openRequest.onsuccess = e => {
          console.log("Conexao obtida com sucesso");
          connection = e.target.result;

      };

      openRequest.onerror = e =>{
          console.log(e.target.error);

      };

      function adiciona(){
        let transaction = connection.transaction(['negociacoes'],'readwrite');

        let store = transaction.objectStore('negociacoes');

        let negociacao = new Negociacao(new Date(), 200, 1);

        let request = store.add(negociacao);

          request.onsuccess = e =>{
            console.log('Negociacao incluida com sucesso');
          }
          request.onerror = e=>{
            console.log('Falha ao incluir a negociacao');
          }

      };

      adiciona();

      function listaTodos() {
        let store = transaction.objectStore('negociacoes');
        let cursor = transction.openCursos();

        cursor.onsuccess = e=>{
          let atual=e.target.result;

          if(atual){
            let dado = atual.value;
            negociacoes.push(new Negociacao(dado._data, dado._quantidade, dado._valor));
            atual.continue();
          }else{
            console.log(negociacoes);
          }
        }

        cursor.onerror = e=>{
            console.log(e.target.error.name);
        }


      };

  </script>
</body>
</html>
1 resposta
solução!

O objeto connection somente vai ser criado se o código entrar no bloco do " openRequest.onsuccess". Se você trocar a posição da chamada do adiciona() e colocar ele nessa parte do "onsucess", esse erro não deve aparecer

var connection;
    var openRequest = window.indexedDB.open("aluraframe",4);

   openRequest.onupgradeneeded = e => {
      //cria ou altera um banco existente
      console.log("cria bando aluraframe");
      let minhaConnection = e.target.result;

      if(minhaConnection.objectStoreNames.contains('negociacoes')) {
          minhaConnection.deleteObjectStore('negociacoes');
          console.log('Apagou o banco')
      }

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

    openRequest.onsuccess = e => {
          console.log("Conexao obtida com sucesso");
          connection = e.target.result;
    adiciona(); 

      };

      openRequest.onerror = e =>{
          console.log(e.target.error);

      };

//Resto do código abaixo

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