Skip to content

concat - concatenar fluxos em sequência

concat é uma Creation Function que executa sequencialmente múltiplos Observables na ordem especificada. O próximo Observable é emitido após o Observable anterior estar complete.

Sintaxe básica e uso

ts
import { concat, of, delay } from 'rxjs';

const obs1$ = of('A', 'B').pipe(delay(100));
const obs2$ = of('C', 'D').pipe(delay(100));

concat(obs1$, obs2$).subscribe(console.log);
// Saída: A → B → C → D
  • Após todos os valores de obs1$ terem sido emitidos, obs2$ começará a ser emitido.
  • O ponto chave é que os fluxos não são executados simultaneamente, mas "em ordem".

🌐 Documentação Oficial RxJS - concat

Padrões típicos de utilização

  • Processamento passo a passo: Quando você deseja prosseguir para a próxima etapa após a etapa anterior estar completa.
  • Requisições de API com ordem garantida: Operações assíncronas que precisam ser realizadas em sequência.
  • Controle de eventos de UI onde a ordem é importante, como animações e notificações

Exemplos práticos de código (com UI)

Este é um exemplo de exibição de mensagens de carregamento e listas de dados em ordem sequencial.

ts
import { concat, of, timer } from 'rxjs';
import { map, take } from 'rxjs';

// Criar área de saída
const output = document.createElement('div');
output.innerHTML = '<h3>Exemplo prático de concat:</h3>';
document.body.appendChild(output);

// Fluxo de carregamento
const loading$ = timer(0, 1000).pipe(
  map((count) => `⏳ Carregando... (${count + 1}s)`),
  take(3) // Emite apenas por 3 segundos
);

// Fluxo de lista de dados
const data$ = of('🍎 Maçã', '🍌 Banana', '🍇 Uva');

// concat e exibir em ordem
concat(loading$, data$).subscribe((value) => {
  const item = document.createElement('div');
  item.textContent = value;
  output.appendChild(item);
});
  • A mensagem de carregamento é exibida três vezes primeiro,
  • A mensagem de carregamento é exibida três vezes primeiro, e então a lista de dados é exibida em ordem.
  • Ao usar concat, uma exibição natural "passo a passo" pode ser facilmente alcançada.

Operadores Relacionados

  • concatWith - Versão Pipeable Operator (usado em pipeline)
  • concatMap - mapeia e concatena cada valor sequencialmente
  • merge - Creation Function de concatenação paralela

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