Skip to content

Funciones de Creación de Combinación ​

Estas son las principales Funciones de Creación para combinar múltiples Observables en un solo Observable.

¿Qué son las Funciones de Creación de Combinación? ​

Las Funciones de Creación de Combinación toman múltiples Observables y los combinan en un único flujo Observable. El momento y el orden en que se emiten los valores depende del método de combinación.

La siguiente tabla muestra las características de cada Función de Creación y cómo usarlas.

Principales Funciones de Creación de Combinación ​

FunciónDescripciónCasos de Uso
concatCombinación secuencial (la siguiente comienza después de que la anterior complete)Procesamiento paso a paso
mergeCombinación paralela (suscribe simultáneamente, salida en orden de emisión)Integración de múltiples eventos
combineLatestCombina los valores más recientesSincronización de entradas de formulario
zipEmpareja valores correspondientesEmparejar solicitudes con respuestas
forkJoinEspera a que todos completen y combina los valores finalesEsperar a que completen llamadas API paralelas

Criterios de Uso ​

La selección de Funciones de Creación de Combinación se determina desde las siguientes perspectivas:

1. Momento de Ejecución ​

  • Ejecución secuencial: concat - Inicia la siguiente después de que el Observable anterior complete
  • Ejecución paralela: merge, combineLatest, zip, forkJoin - Se suscribe a todos los Observables simultáneamente

2. Cómo Emitir Valores ​

  • Emitir todos los valores: concat, merge - Emite todos los valores de cada Observable
  • Combinar valores más recientes: combineLatest - Combina todos los valores más recientes cada vez que uno emite
  • Emparejar valores correspondientes: zip - Empareja valores de posiciones correspondientes en cada Observable y emite
  • Solo valores finales: forkJoin - Emite cada valor final como un array cuando todos los Observables completan

3. Momento de Completación ​

  • Después de que todos completen: concat, forkJoin - Espera hasta que todos los Observables hayan completado
  • Completa con el flujo más corto: zip - Completa cuando cualquiera completa, ya que los valores restantes no pueden formar pares
  • No completa: merge, combineLatest - Si uno completa mientras el otro continúa, no completará

Convertir Cold a Hot ​

Como se muestra en la tabla anterior, todas las Funciones de Creación de Combinación generan Cold Observables. Cada suscripción inicia una ejecución independiente.

Sin embargo, puedes convertir un Cold Observable a Hot Observable usando un operador de multicast (share(), shareReplay(), publish(), etc.).

Ejemplo Práctico: Compartir Solicitudes HTTP ​

typescript
import { merge, interval } from 'rxjs';
import { map, take, share } from 'rxjs';

// ❄️ Cold - Solicitudes HTTP independientes para cada suscripción
const coldApi$ = merge(
  interval(1000).pipe(map(() => 'Fuente A'), take(3)),
  interval(1500).pipe(map(() => 'Fuente B'), take(2))
);

coldApi$.subscribe(val => console.log('Suscriptor 1:', val));
coldApi$.subscribe(val => console.log('Suscriptor 2:', val));
// → Cada suscriptor ejecuta intervalos independientes (2x solicitudes)

// 🔥 Hot - Comparte ejecución entre suscriptores
const hotApi$ = merge(
  interval(1000).pipe(map(() => 'Fuente A'), take(3)),
  interval(1500).pipe(map(() => 'Fuente B'), take(2))
).pipe(share());

hotApi$.subscribe(val => console.log('Suscriptor 1:', val));
hotApi$.subscribe(val => console.log('Suscriptor 2:', val));
// → Comparte un intervalo (solicitudes solo una vez)

TIP

Casos donde se requiere conversión a Hot:

  • Múltiples componentes comparten los mismos resultados API
  • Usar forkJoin para usar los resultados de solicitudes paralelas en múltiples lugares
  • Gestionar estado con combineLatest y distribuir a múltiples suscriptores

Para más información, consulta Creación Básica - Convertir Cold a Hot.

Correspondencia con Pipeable Operator ​

Para las Funciones de Creación de Combinación, existe un Pipeable Operator correspondiente. Cuando se usa en un pipeline, se utiliza el operador tipo ~With.

Función de CreaciónPipeable Operator
concat(a$, b$)a$.pipe(concatWith(b$))
merge(a$, b$)a$.pipe(mergeWith(b$))
zip(a$, b$)a$.pipe(zipWith(b$))
combineLatest([a$, b$])a$.pipe(combineLatestWith(b$))

Próximos Pasos ​

Para aprender el comportamiento detallado y ejemplos prácticos de cada Función de Creación, haz clic en los enlaces de la tabla anterior.

Además, aprende sobre Funciones de Creación de Selección/Partición y Funciones de Creación Condicionales, para entender el panorama completo de las Funciones de Creación.

Publicado bajo licencia CC-BY-4.0.