Optimización de suscripciones con SwitchMap en Angular
Clase 5 de 25 • Curso 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.