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

NeciacaoDao devolve promise?

Fala pessoal, fiquei com uma duvida nesse codigo abaixo:

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

Nesta parte:

  .then(connection => new NegociacaoDao(connection))
            .then(dao => dao.listaTodos())

...então eu criei uma NegociacaoDao a partir da promise que me devolve a connection.

mas depois uso o then de novo, o que nao entendi e que a instância de NegociacaoDao nao devolve promise e mesmo assim foi possivel utilizar a then.

Poderia me esclarecer esta duvida?

Obrigado!

5 respostas
solução!

Olá,

Não sou um excelente entendedor de Promises, mas o que ocorre é o seguinte... A chamada dentro do Then, se não devolver uma nova promise, o que ela devolver vai ser passado direto para o próximo encadeamento.

Então você pode fazer algo como abaixo

pro.then(() => 12).then(numero => console.log(numero))

Repare que o "12" esta sendo retornado direto como valor para o then seguinte. Espero ter sanado um pouco da dúvida

Se um then retorna uma promise, na próxima chamada temos acesso ao resultado da promise. Se o then retorna qualquer valor que não seja uma promise, o valor é acessado na próxima chamada then.

oi, estou pensando nisso também. e ainda não consegui ver a "luz". aqui:

ConnectionFactory
            .getConnection() // a promise desse método vai retornar uma conection no resolve
            .then(connection => new NegociacaoDao(connection)) // aqui só os métodos de NegociacaoDao retornam promisses
            .then(dao => dao.listaTodos()) // de qual promise esse then está pegando dao ??? socorro!!!
            .then(negociacoes =>
                negociacoes.forEach(negociacao =>
                    this._listaNegociacoes.adiciona(negociacao)));
then(dao => dao.listaTodos()) // de qual promise esse then está pegando dao ??? socorro!!!

O then anterior retorna (return implícito de arrow function) uma instância de NegociacaoDao. É esse dao que você recebe.

Se um then retorna uma promise, na próxima chamada temos acesso ao resultado da promise. Se o then retorna qualquer valor que não seja uma promise, o valor é acessado na próxima chamada then.

intendi perfeitamente. não tinha refletido sobre isso dessa maneira. obrigado.