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

Simplificando o código

Na atividade 3 da aula 3 do curso "JavaScript Avançado III: ES6, orientação a objetos e padrões de projetos", é dado como simplificação do código o seguinte trecho:

    ConnectionFactory
        .getConnection()
        .then(connection => new NegociacaoDao(connection))
        .then(dao => dao.listaTodos())
        .then(negociacoes =>
            negociacoes.forEach(negociacao =>
                this._listaNegociacoes.adiciona(negociacao)))

Porém, no código acima o resultado de "new NegociacaoDao(connection)" está sendo tratado como o retorno de uma Promise (tratado com .then) o que não seria necessário pois new NegociacaoDao sempre retorna um objeto de forma que não é necessário tratá-lo com then. O que tornaria o código mais simples da seguinte forma:

ConnectionFactory
            .getConnection()
            .then(cn => new NegociacaoDAO(cn)
                .listaTodos()
                .then(negociacoes => negociacoes.forEach(negociacao => this._listaNegociacao.adiciona(negociacao))
                )
            )
            .catch(e => console.log(e));

Certo? Ou me perdi no raciocíonio? Valeu.

https://i.imgur.com/mUQIWuL.png

==================

** Cliquei em solucionado sem querer... :P **

Edit: se o problema é o .then dentro de outro .then, poderia ser escrito desta forma:

            ConnectionFactory.getConnection()
            .then(cn => new NegociacaoDAO(cn).listaTodos())
            .then(negociacoes => negociacoes
                .forEach(negociacao => this._listaNegociacao.adiciona(negociacao)))
            .catch(e => console.log(e));

A questão que me levou ao questionamento é usar um tratamento .then quando não há necessidade... Desta forma, com apenas 2 "then's" temos o mesmo resultado com menos linha de código...

3 respostas
solução!

Fala aí Rafael, tudo bem? Bom, isso depende, dizer que a solução dada em aula é mais simples do que a sua ou a sua é mais simples que a da aula é relativo, depende do que é "mais" simples para você ou para mim.

Eu posso achar o da aula mais simples, mas, isso não torna o seu menos ou mais simples.

Eu particularmente não gosto de .then dentro de .then, dessa maneira, prefiro o código dado em aula, onde você vai chamando .then um abaixo do outro.

Acho que deixa mais nitido o fluxo, tipo:

  • Faça isso
  • Isso
  • Isso
  • E isso.

Mas, depende, pessoas podem achar o seu mais simples, é relativo e também de gosto pessoal.

Espero ter ajudado.

Legal, mas ainda assim não ficou bom, se o problema é o .then dentro de outro .then, poderia ser escrito desta forma:

            ConnectionFactory.getConnection()
            .then(cn => new NegociacaoDAO(cn).listaTodos())
            .then(negociacoes => negociacoes
                .forEach(negociacao => this._listaNegociacao.adiciona(negociacao)))
            .catch(e => console.log(e));

A questão que me levou ao questionamento é usar um tratamento .then quando não há necessidade... Desta forma, com apenas 2 "then's" temos o mesmo resultado com menos linha de código...

https://i.imgur.com/ivM6FfY.png

Sim, como eu disse é bem relativo Rafael, não tem muito certo ou errado.

No caso, se você não gostou de usar 2 then's, show de bola, ficou muito boa a solução.

Abraços e bons estudos.