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

Para se usar o return, tem que ser dentro de um bloco?

Ao fazer a melhora no código e deixá-lo mais legível retirando a promise NegociaçãoService aconteceu comigo a seguinte situação:

Por termos retirado a promise, precisamos retirar o resolve e trocá-lo por return sem esquecer de tirar os (). No exemplo tem também um console.log() e por isso foi necessário ter um bloco {}.

Quando fui fazer no meu código, não coloquei o console.log() e por isso mantive o return sem bloco {} por ser uma única linha. E para minha surpresa, recebi erro no console e só consegui resolver após adicionar um bloco {} no return.

O mesmo acontece para o throw

Exemplo funcionando:

return this._http
            .get('negociacoes/anterior')
            .then(negociacoes => {return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor))})
            .catch(erro => {throw new Error('Não foi possível obter as negociações da semana retrasada')})

Exemplo dando erro no console (Unexpected token return):

return this._http
            .get('negociacoes/anterior')
            .then(negociacoes => return negociacoes.map(objeto => new Negociacao(new Date(objeto.data), objeto.quantidade, objeto.valor)))
            .catch(erro => throw new Error('Não foi possível obter as negociações da semana retrasada'))

Por que?

3 respostas

Olá Rodrigo Pereira, Quando você tem uma unica linha em uma arrow function você não precisa dar return porque ela já faz isso implicitamente , porem quando você tem um bloco de código dentro dela como no primeiro exemplo você precisa ter um return ;)

Olá Alan,

É verdade, a arrow function já tem o return implícito quando se está em uma única linha e logicamente em bloco ele não saberia o que retornar e por isso em bloco funciona.

Só ficou faltando entender o porque com o throw acontece a mesma coisa, só funciona com bloco {} e quando está numa única linha da erro de sintaxe no browser também.

Qual motivo desse erro?

solução!

Quando você usa o throw em uma linha temos um problema porque no throw não podemos usar return. Então por isso somos obrigados a colocar ele dentro de um bloco sem return