RxJS: Operadores Avanzados para Angular Developers
7 de diciembre de 2025
Osman Jimenez
Angular RxJS Desarrollo Web
Dominando RxJS en Angular
RxJS es el corazón de la programación reactiva en Angular. Más allá de los operadores básicos como map y filter, existen operadores avanzados que pueden transformar completamente tu código.
Operadores de Transformación Avanzados
switchMap vs mergeMap vs concatMap vs exhaustMap
Estos operadores son fundamentales pero a menudo confusos:
// switchMap: Cancela peticiones anteriores
this.searchControl.valueChanges.pipe(
debounceTime(300),
switchMap(term => this.api.search(term))
).subscribe();
// mergeMap: Ejecuta todas en paralelo
this.items$.pipe(
mergeMap(item => this.api.getDetails(item.id))
).subscribe();
// concatMap: Ejecuta en orden secuencial
this.queue$.pipe(
concatMap(task => this.processTask(task))
).subscribe();
// exhaustMap: Ignora nuevas peticiones hasta completar la actual
this.saveButton$.pipe(
exhaustMap(() => this.api.save(this.form.value))
).subscribe();Operadores de Combinación
combineLatest, forkJoin, zip
// combineLatest: Emite cuando cualquiera cambia
combineLatest([
this.user$,
this.permissions$,
this.settings$
]).pipe(
map(([user, permissions, settings]) => ({
user, permissions, settings
}))
).subscribe();
// forkJoin: Espera a que todos completen
forkJoin({
users: this.api.getUsers(),
products: this.api.getProducts(),
orders: this.api.getOrders()
}).subscribe();
// zip: Combina valores en el mismo índice
zip(
interval(1000),
of('a', 'b', 'c')
).subscribe(([num, letter]) => console.log(num, letter));Manejo de Errores Avanzado
this.api.getData().pipe(
retry(3),
retryWhen(errors => errors.pipe(
delayWhen((error, index) => timer(Math.pow(2, index) * 1000)),
take(3)
)),
catchError(error => {
this.logger.error(error);
return of([]);
})
).subscribe();Mejores Prácticas
- Siempre desuscribirse: Usa takeUntil con un Subject destroy$
- Evita nested subscriptions: Usa operadores de transformación
- Maneja errores: Siempre incluye catchError
- Usa shareReplay: Para evitar múltiples HTTP requests
- Tipado fuerte: Define tipos para tus Observables
Conclusión
Dominar RxJS es esencial para ser un desarrollador Angular efectivo. Estos operadores avanzados te permiten escribir código más limpio, eficiente y mantenible.