2
respostas

"return" ao invés de "resolve", "throw new Error()" ao invés de reject

Oi!

No código:

  obterNegociacoesDaSemana() {
        return this._http
            .get('negociacoes/semana')
            .then(negociacoes => {

                console.log(negociacoes);

                return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor));
            })
            .catch(erro => {
                console.log(erro);
                throw new Error('Não foi possível obter as negociações da semana');
            });  
    }

Esse código:

   return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor));

Dá no mesmo que usar:

resolve(negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)))

Usar return dá no mesmo que usar o resolve?

E para erro, usar:

 throw new Error('Não foi possível obter as negociações da semana');

dá no mesmo que usar:

 reject('Não foi possível obter as negociações da semana');

?

2 respostas

Marcelo, boa tarde!

Começando com o reject() VS throw new Error():

1 - Usar apenas o reject, não para a execução dos outros códigos, por isso usamos o return reject()

2 - O manipulador .then () captura a exceção lançada e a transforma em uma promessa rejeitada automaticamente. Desde que eu li que as exceções lançadas não são particularmente rápidas de executar, eu acho que retornar a promessa rejeitada pode ser um pouco mais rápido de executar, mas você teria que criar um teste em vários navegadores modernos, se isso fosse importante saber.

3 - Vale a pena mencionar que os lugares dentro de um retorno de chamada assíncrona não prometida que você não pode usar o erro de lançamento, você também não pode usar o retorno Promise.reject(erro). É basicamente por isso que você não deve colocar callbacks assíncronos dentro de promessas. Promova tudo o que é assíncrono e então você não tem essas restrições.

Partindo do ponto que estamos usando promisses recomendo usar o resolve e o reject, pois apesar de terem características parecidas com o return (...) e o throw new Error, nem toda rejeição deve ser um erro, e um return, não quer dizer necessariamente que foi resolvido, usar ambos deixam o código mais semântico.

Espero ter ajudado e bons estudos!

Ainda não entendi.

A maneira que foi usada no código acima , da na mesma que usar resolve e reject?

Quando devo usar um ou o outro?