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

TypeError: Cannot read property 'then' of undefined

Olá! o console está me apresentando o erro do título do tópico na linha 34 do arquivo NegociacaoController.js. Segue o código:

class NegociacaoController {

  constructor(){
    let $ = document.querySelector.bind(document);
    this._inputData = $("#data");
    this._inputQuantidade = $("#quantidade");
    this._inputValor = $("#valor");

    this._listaNegociacoes = new Bind(
      new ListaNegociacoes(),
      new NegociacoesView($('#negociacoesView')),
      'adiciona', 'esvazia');

    this._mensagem = new Bind(
      new Mensagem(),
      new MensagemView($('#mensagemView')),
      'texto');

    this._listaNegociacoes = new Bind(
      new ListaNegociacoes(),
      new NegociacoesView($('#negociacoesView')),
      'adiciona', 'esvazia', 'ordena', 'inverteOrdem');

    this._ordemAtual = '';
  }

  adiciona(event) {
    event.preventDefault();
    ConnectionFactory.getConnection()
      .then(connection => {
        let negociacao = this._criaNegociacao();
        new NegociacaoDao(connection)
          .adiciona(negociacao)
          .then(() => {
            this._listaNegociacoes.adiciona(negociacao);
            this._mensagem.texto = 'Negociação adicionada com sucesso!';
            this._limpaFormulario();
          })
      })
      .catch(erro => {
        this._mensagem.texto = erro;
        console.log(erro);
      });
  }

  importaNegociacoes() {
    let service = new NegociacaoService();
    service
    .obterNegociacoes()
    .then(negociacoes => {
      negociacoes.forEach(negociacao => this._listaNegociacoes.adiciona(negociacao));
      this._mensagem.texto = 'Negociações do período importadas com sucesso';
    })
    .catch(error => this._mensagem.texto = error);
  }

  apaga() {
    this._listaNegociacoes.esvazia();
    this._mensagem.texto = 'Negociações apagadas com sucesso';
  }

  _criaNegociacao(){
    return new Negociacao(
      DateHelper.textoParaData(this._inputData.value),
      this._inputQuantidade.value,
      this._inputValor.value);
  }

  _limpaFormulario() {
    this._inputData.value ='';
    this._inputQuantidade.value = 1;
    this._inputValor.value = 0.0;
    this._inputData.focus();
  }

  ordena(coluna) {
    if(this._ordemAtual == coluna) {
      this._listaNegociacoes.inverteOrdem();
    } else {
      this._listaNegociacoes.ordena((a, b) => a[coluna] - b[coluna]);
    }
      this._ordemAtual = coluna;
  }
}

Aqui está meu NegociacaoDao.js:

class NegociacaoDao {
  constructor(connection) {
    this._connection = connection;
    this._store = 'negociacoes';
  }

  adiciona(negociacao) {
    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');
      }
    });
  }
}

Alguém sabe me dizer onde errei? Obrigado desde já!

2 respostas
solução!

Boa noite!

Faltou o return no método adiciona na classe NegociacaoDao.

Sucesso e bom estudo!

Era isso mesmo, obrigado Flávio!