Optimización de suscripciones con SwitchMap en Angular

Clase 5 de 25Curso de Angular Router: Lazy Loading y Programación Modular

Resumen

Uno de los principales problemas de los observables es el Callback Hell. La anidación de N cantidad de suscripciones, una dentro de la otra, vuelve tu código muy difícil de mantener y de leer.

Solucionando problemas de Callbacks

Utilizando promesas, puedes resolver esto fácilmente con async/await. Pero si hablamos de observables, nuestra mejor amiga, la librería RxJS, llega para aportar su solución.

Un ejemplo común de esta problemática en Angular es como la siguiente:

readAndUpdate(): void { // Ejemplo de callback hell this.apiService.getProduct(1) .subscribe(res => { this.apiService.updateProduct(1, { name: 'Nuevo nombre del producto' }) .subscribe(res2 => { // ... }); }); }

Donde se está realizando una petición para la lectura de un producto e inmediatamente se está actualizando el mismo. Generando un subscribe dentro de otro. Tal vez, hasta dos subscribe es aceptable, pero no se recomienda continuar con esa estructura de código y es posible resolverlo de la siguiente manera.

import { switchMap } from 'rxjs/operators'; readAndUpdate(): void { // Solución callback hell this.apiService.getProduct(1) .pipe( switchMap(products => this.apiService.updateProduct(1, { name: 'Nuevo nombre' }) ) ) .subscribe(res => { // Producto actualizado }); }

Importando switchMap desde rxjs/operators, lo que hace esta función es recibir el dato que emite un observable, y utilizarlo inmediatamente como input para el segundo. De esta manera, el código queda más limpio y profesional.


Contribución creada por: Kevin Fiorentino.