Skip to content

Creation Functions

No RxJS, existem duas formas diferentes: Creation Functions para criar Observables e Pipeable Operators para converter Observables existentes.

Esta página descreve os conceitos básicos das Creation Functions e as sete categorias principais.

O que são Creation Functions?

Creation Functions são funções para criar novos Observables.

typescript
import { of, from, interval } from 'rxjs';

// Usando como Creation Functions
const obs1$ = of(1, 2, 3);
const obs2$ = from([4, 5, 6]);
const obs3$ = interval(1000);

Elas são importadas diretamente do pacote rxjs e chamadas como funções para criar Observables.

Diferença em relação ao Pipeable Operator

Creation Functions e Pipeable Operators têm usos e aplicações diferentes. Veja a tabela abaixo para ver as diferenças entre eles.

CaracterísticaCreation FunctionPipeable Operator
ObjetivoCriar novo ObservableTransformar Observable existente
Importar derxjsrxjs/operators
UsoChamar diretamente como funçãoUsar dentro de .pipe()
Exemploconcat(obs1$, obs2$)obs1$.pipe(concatWith(obs2$))

Exemplo de Creation Function

Creation Functions são usadas para combinar diretamente múltiplos Observables.

typescript
import { concat, of } from 'rxjs';

const obs1$ = of(1, 2, 3);
const obs2$ = of(4, 5, 6);

// Usando como Creation Function
concat(obs1$, obs2$).subscribe(console.log);
// Saída: 1, 2, 3, 4, 5, 6

Exemplo de Pipeable Operator

O Pipeable Operator é usado para adicionar um processo de conversão a um Observable existente.

typescript
import { of } from 'rxjs';
import { concatWith } from 'rxjs';

const obs1$ = of(1, 2, 3);
const obs2$ = of(4, 5, 6);

// Usando como Pipeable Operator
obs1$.pipe(
  concatWith(obs2$)
).subscribe(console.log);
// Saída: 1, 2, 3, 4, 5, 6

Critérios de Uso

A escolha entre Creation Function e Pipeable Operator é determinada pelos seguintes critérios.

Quando usar Creation Function

A Creation Function é adequada quando múltiplos Observables devem ser operados no mesmo nível ou quando um Observable deve ser criado do zero.

  • Ao combinar múltiplos Observables no mesmo nível

    typescript
    concat(obs1$, obs2$, obs3$)
    merge(click$, hover$, scroll$)
  • Ao criar um Observable do zero

    typescript
    of(1, 2, 3)
    from([1, 2, 3])
    interval(1000)

Quando usar Pipeable Operator

O Pipeable Operator é adequado para adicionar processamento a um Observable existente ou para encadear múltiplas operações juntas.

  • Ao adicionar operações a um Observable existente

    typescript
    obs1$.pipe(
      map(x => x * 2),
      concatWith(obs2$),
      filter(x => x > 5)
    )
  • Ao encadear múltiplas operações como um pipeline

Categorias de Creation Functions

Neste capítulo, as Creation Functions são divididas em sete categorias.

Lista de Todas as Categorias

Na tabela abaixo, você pode ver todas as categorias e as funções que elas contêm. Clique em cada nome de função para ir à página de detalhes.

CategoriaDescriçãoFunções PrincipaisCasos de Uso Típicos
Criação BásicaFunções mais básicas e frequentemente usadas. Criar Observables baseados em dados, arrays, eventos e tempoof, from, fromEvent, interval, timerTestes com valores fixos, streaming de dados existentes, manipulação de eventos DOM, polling, execução atrasada
Geração de LoopExpressar processamento de loop como declarações for/while em Observablerange, generateGeração de números sequenciais, processamento em lote, transições de estado complexas, cálculos matemáticos
Comunicação HTTPManipular comunicação HTTP como Observableajax, fromFetchComunicação HTTP baseada em XMLHttpRequest, comunicação HTTP baseada em Fetch API, chamadas de API REST
CombinaçãoCombinar múltiplos Observables em um. O timing e a ordem de emissão diferem dependendo do método de combinaçãoconcat, merge, combineLatest, zip, forkJoinProcessamento passo a passo, integração de múltiplos eventos, sincronização de entradas de formulário, espera pela conclusão de chamadas de API paralelas
Seleção/PartiçãoSelecionar um de múltiplos Observables ou particionar um Observable em múltiplosrace, partitionCompetição entre múltiplas fontes de dados, ramificação de sucesso/falha
CondicionalSelecionar Observable com base em condições ou gerar dinamicamente no momento da assinaturaiif, deferRamificação de processamento baseada em status de login, criação dinâmica de Observable, avaliação preguiçosa
ControleControlar o timing de execução do Observable e gerenciamento de recursosscheduled, usingControle de timing de execução com scheduler, gerenciamento de ciclo de vida de recursos, prevenção de vazamento de memória

TIP

Ordem de Aprendizado

Recomendamos que iniciantes aprendam na seguinte ordem:

  1. Criação Básica - Funções fundamentais do RxJS
  2. Combinação - Fundamentos de manipulação de múltiplos streams
  3. Comunicação HTTP - Integração prática de API
  4. Outras categorias - Aprender conforme necessário

Correspondência com Pipeable Operator

Muitas Creation Functions têm um Pipeable Operator correspondente. Quando usado em um pipeline, use um operador da família ~With.

Creation FunctionPipeable OperatorNotas
concat(a$, b$)a$.pipe(concatWith(b$))RxJS 7+
merge(a$, b$)a$.pipe(mergeWith(b$))RxJS 7+
zip(a$, b$)a$.pipe(zipWith(b$))RxJS 7+
combineLatest([a$, b$])a$.pipe(combineLatestWith(b$))RxJS 7+
race(a$, b$)a$.pipe(raceWith(b$))RxJS 7+

NOTE

Desde o RxJS 7, concatWith, mergeWith, zipWith, combineLatestWith, raceWith e outros operadores do tipo ~With foram adicionados, facilitando o uso como Pipeable Operator.

Qual Devo Usar?

A escolha entre Creation Function e Pipeable Operator depende do contexto.

Creation Function é Recomendada

Se múltiplos Observables devem ser operados no mesmo nível, a Creation Function simplificará o código.

typescript
// ✅ Combinar múltiplos Observables no mesmo nível
const combined$ = merge(
  fromEvent(button1, 'click'),
  fromEvent(button2, 'click'),
  fromEvent(button3, 'click')
);

Pipeable Operator é Recomendado

Ao adicionar operações como parte de um pipeline, use Pipeable Operator para esclarecer o fluxo de processamento.

typescript
// ✅ Combinar como parte do pipeline
const result$ = source$.pipe(
  map(x => x * 2),
  mergeWith(other$),
  filter(x => x > 10)
);

Resumo

  • Creation Functions: Funções para criar e combinar Observables
  • Pipeable Operators: Funções para converter Observables existentes
  • Creation Functions se dividem em 7 categorias:
    1. Criação Básica: Criar Observables baseados em dados, arrays, eventos e tempo
    2. Geração de Loop: Expressar processamento iterativo em Observable
    3. Comunicação HTTP: Manipular comunicação HTTP como Observable
    4. Combinação: Combinar múltiplos em um
    5. Seleção/Partição: Selecionar ou particionar
    6. Condicional: Gerar dinamicamente de acordo com condições
    7. Controle: Controlar timing de execução e gerenciamento de recursos
  • Use operadores Pipeable da família ~With em pipelines
  • Cada categoria contém múltiplas funções e pode ser usada de maneiras diferentes dependendo da aplicação

Próximos Passos

Para aprender mais sobre cada categoria, siga os links abaixo:

  1. Funções de Criação Básica - of, from, fromEvent, interval, timer
  2. Funções de Geração de Loop - range, generate
  3. Funções de Comunicação HTTP - ajax, fromFetch
  4. Funções de Combinação - concat, merge, combineLatest, zip, forkJoin
  5. Funções de Seleção/Partição - race, partition
  6. Funções Condicionais - iif, defer
  7. Funções de Controle - scheduled, using

Em cada página, você aprenderá mais sobre como as Creation Functions funcionam e exemplos práticos.

Recursos de Referência

Lançado sob a licença CC-BY-4.0.