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

Resolve implicito - Curso Javascript Avançado III - Aula 4 - Item 6

Estou com uma dúvida nesse curso. Na aula 4 - item 6, o código escrito utiliza o retorno implicito como se fosse uma Promise, mas sem declarar promise , como abaixo:

class Service()
...
lista() {

  return ConnectionFactory
          .getConnection()
          .then(connection => new NegociacaoDao(connection))
          .then(dao => dao.listaTodos())
          .catch(erro => {
              console.log(erro);
              throw new Error('Não foi possível obter as negociações')
            })
}

E depois o mesmo é chamado na classe de Controller assim:

class Controller()
...
_init() {
    this._service
        .lista()
        .then(negociacoes =>
            negociacoes.forEach(dado =>
                this._listaNegociacoes.adiciona(negociacao)))
        .catch(erro => this._mensagem.texto = erro);

}

E inclusive no vídeo da aula, funciona perfeitamente. Porém, na minha aplicação isso não funciona. Só funcionou quando declarei promise nos retornos, os códigos ficaram assim:

class Service()
...
lista() {
        return new Promise((resolve, reject) => {
            ConnectionFactory
                .getConnection()
                .then(connection => new NegociacaoDao(connection))
                .then(dao => {
                    resolve(dao.listaTodos())
                })
                .catch(erro => {
                    console.log(erro);
                    throw new Error('Não foi possível obter as negociações');
                });
        })
}
______________________________________________________________________
class Controller()
...
_init() {
        this._service
            .lista()
            .then(negociacoes => {
                negociacoes.forEach(negociacao =>
                    this._listaNegociacoes.adiciona(negociacao))
            })
            .catch(erro => {
                this_mensagem.texto = erro;
            });
}

Sabem me informar porquê não funcionou como explicado na aula??? Ocorreu alguma mudança no ES6 da data da aula até hoje que barrou isso?

3 respostas

Não há necessidade de fazer o que você fez. Você esta criando uma promise de uma promise! Você diz que há um erro na primeira forma, qual erro? Sempre que postar poste a mensagem de erro exibida no console do Chrome.

No aguardo!

solução!

Flavio,

Encontrei o erro. Na verdade havia eu disse que havia um erro no meu projeto, e estava estranhando o seu funcionar e o meu não.

O erro que retornava era "Uncaught TypeError: Cannot read property 'then' of undefined"

Mas já encontrei o problema. Dentro do metodo lista() do service, eu não tinha iniciado o mesmo com o "return". Só inclui o 'return' com a promise.

Muito obrigado pela explicação e pela atenção. Bora continuar o resto das aulas.

abs.

Que boa notícia! Bora virar cangaceiro JavaScript!