2
respostas

Promises: explicação do .then(console.log), que substituiu o código equivalente .then(total => console.log(total))

Olá pessoal!

O código .then(total => console.log(total)) acredito ter entendido, mas não entendi o código equivalente que o substituiu: .then(console.log).

No primeiro código é passada uma função com o total como parâmetro para o then, mas no segundo código não consegui visualizar como isso acontece, como o then recebe este total, se está sendo passado somente console.log, sem este parâmetro.

Inclusive não entendi como é que internamente o then vai saber que deve executar o console.log passando este parâmetro.

Obs1: não encontrei esta explicação nos 3 módulos de JS avançado, caso exista favor me informem.

Obs2 : não incluí o código anterior/posterior porque me pareceu ser possível o entendimento com apenas este código (a promise anterior retorna um total, que é exibido no console através do then()).

Atenciosamente.

2 respostas

Fala aí Elías, tudo bem? Bom, vamos lá:

No primeiro exemplo:

.then(total => console.log(total))

Repare que passamos uma função como parâmetro para o .then que será executada como callback caso o .then seja chamado.

Agora, vamos pensar:

Se o .then recebe uma função de callback como parâmetro, será que não podemos passar uma função de forma direta?

É exatamente isso que o segundo código faz:

.then(console.log)

O console.log é uma função, e será executada como callaback do .then.

Agora, vamos pensar novamente:

O console.log é uma função que pode receber parâmetros, se nosso .then recebe um parâmetro, será que esse parâmetro não pode ser repassado?

É exatamente isso que o JavaScript faz.

Obs: Lembrando que eu tentei simplificar e reduzir ao máximo, claro que por trás de tudo envolve coisas mais complexas e técnicas.

Espero ter ajudado.

Olá Matheus, tudo bem e você?

Obrigado pelo retorno.

1 - Ok, o console.log é passado diretamente para o then, mas como o then sabe/entende que deverá chamar o console.log passando um parâmetro (porque o then poderia ter chamado o console.log sem nenhum parâmetro....) ?

2 - Se no then eu precisar passar um função que recebe mais do que um parâmetro, como ficaria a passagem dessa função para o then de forma direta?

Atenciosamente.