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.
zipnão começa a emitir até que cada observável interno emita pelo menos um valorzipemite desde que os valores emitidos possam ser coletados de todos os observáveis internoszipemite 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 😏
combineLatestnã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.
forkJoinemite o último valor emitido de cada observável interno depois que eles todos completoforkJoinnunca 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
forkJoinnã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,
forkJoincompleta
- 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,
forkJoincompleta
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!
