zip, forkJoin, & combineLatest Explained with Examples

Operadores são funções puras que permitem um estilo de programação funcional para lidar com coleções com operações. Existem dois tipos de operadores:

  • Operadores de criação
  • Operadores canalizáveis: transformação, filtragem, limitação de taxa, achatamento

Os assuntos são um tipo especial de Observável que permite que valores sejam multicast para muitos observadores. Enquanto Observáveis ​​simples são unicast (cada observador inscrito possui uma execução independente do observável); os assuntos são multicast. Isto é o que chamamos de quente observável.

Neste artigo, vou focar no zip, combineLatest e forkJoin operadores. Esses são operadores combinados do RxJS, o que significa que eles nos permitem juntar informações de vários observáveis. Ordem, tempo e estrutura dos valores emitidos são as principais diferenças entre eles.

Vamos olhar para cada um individualmente.

  • zip não começa a emitir até que cada observável interno emita pelo menos um valor
  • zip emite desde que os valores emitidos possam ser coletados de todos os observáveis ​​internos
  • zip emite valores como uma matriz

Vamos imaginar que você esteja com Mario e Luigi, dois de seus melhores amigos, no melhor restaurante italiano de Roma. Cada um de vocês pede uma bebida, uma pizza e uma sobremesa. Você especifica ao garçom que traga as bebidas primeiro, depois as pizzas e, finalmente, as sobremesas.

Essa situação pode ser representada com três observáveis ​​diferentes, representando as três ordens diferentes. Nesta situação específica, o garçom pode usar o zip operador para trazer (emitir) os diferentes itens do pedido por categoria.

❗️❗️❗️Warning❗️❗️❗️

Se você voltar ao mesmo restaurante italiano com sua namorada, mas ela não quiser comer, é isso que acontecerá:

Se o waiter$ usa o zip operador, você só receberá sua bebida!

Por quê?

Porque, quando o waiter$ emite as bebidas, o girlfriend$ O observável está completo e nenhum valor pode ser coletado dele. Felizmente, o waiter$ pode usar outro operador para nós, para não terminarmos com nossa namorada 😏

  • combineLatest não começa a emitir até que cada observável interno emita pelo menos um valor
  • Quando qualquer observável interno emitir um valor, emita o último valor emitido de cada

No mesmo restaurante, o inteligente waiter$ agora decida usar combineLatest operador.

❗️❗️❗️Warning❗️❗️❗️

Com combineLatest, a ordem dos observáveis ​​internos fornecidos é importante.

E se you$ é fornecido primeiro para waiter$, emitirá apenas um valor ["Tiramisu", "Sprite"].

Isso está acontecendo porque combineLatest não começa a emitir até que cada observável interno emita pelo menos um valor. girlfriend$ começa a emitir quando o primeiro observável interno emite seu último valor. Então, combineLatest emite os últimos valores coletados dos dois observáveis ​​internos.

  • forkJoin emite o último valor emitido de cada observável interno depois que eles todos completo
  • forkJoin nunca será emitido se um dos observáveis ​​não for concluído

Quando você vai ao restaurante e pede uma pizza, não quer saber todas as etapas sobre como a pizza é preparada. Se o queijo é adicionado antes dos tomates ou o contrário. Você só quer pegar sua pizza! Aqui é onde forkJoin entra em jogo.

❗️❗️❗️Warning❗️❗️❗️

  • Se um dos observáveis ​​internos gera um erro, todos os valores são perdidos
  • forkJoin não completa

  • Se você está preocupado apenas quando todos observáveis ​​internos concluídos com êxito, você pode capturar o erro do lado de fora
  • Então, forkJoin completa

  • Se você não se importa que os observáveis ​​internos sejam concluídos com êxito ou não, você deve detectar erros de todos os observáveis ​​internos
  • Então, forkJoin completa

Pessoalmente, quando vou a um restaurante com amigos, não me importo se um deles recebe uma pizza queimada. Eu só quero o meu, então vou perguntar ao waiter$ para capturar os erros dos observáveis ​​internos individualmente.

Nós cobrimos muito neste artigo! Bons exemplos são importantes para entender melhor os operadores RxJS e como escolhê-los com sabedoria.

Para operadores combinados como zip, combineLateste forkJoin a ordem dos observáveis ​​internos que você fornece também é crítica, pois pode levar você a comportamentos inesperados.

Há muito mais a ser abordado no RxJS e farei isso em outros artigos.

Espero que tenha gostado deste artigo! 😍

Can Você pode Siga me no twitter para ser notificado sobre novas postagens no blog Angular / RxJS e dicas legais!