No minuto 05:20 o professor usa a função tap para salvar o token. Isso não poderia ser feito diretamente na função pipe?
No minuto 05:20 o professor usa a função tap para salvar o token. Isso não poderia ser feito diretamente na função pipe?
Olá, Diogo! Tudo bem?
Acredito que sim, poderia, mas o tap
é a melhor prática nesse cenário.
Como nós não estamos interessados no valor resultante, ou seja, não queremos manipular/modificar o Observable, e sim fazer um efeito colateral, usamos o tap
porque ele "sai" do fluxo de dados.
Então, recebemos o dado no tap
, ele executa algo que, apesar de dependente do valor do Observable, não afeta o Observable em si, e o fluxo continua.
Na documentação do RxJS, há uma ótima ilustração do "posicionamento" do tap
em relação ao processo principal, além de outras informações: RxJS - Tap.
Mas destaco esse trecho:
Tap é desenhado para permitir ao desenvolvedor um local designado (específico) para efetuar efeitos colaterais (side effects). Enquanto você pode efetuar efeitos colaterais dentro de um
map
ou de ummergeMap
, isso tornaria as funções impuras, o que não é sempre um grande problema, mas vai fazer com que você não possa fazer coisas como memoizar essas funções. O operadortap
é desenhado apenas para tais efeitos colaterais, para ajudar você a remover efeitos colaterais de outras operações.
Espero ter ajudado!
Obrigado