Optimización de suscripciones con SwitchMap en Angular
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 hellthis.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.
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.
Súper, Nico. RxJS es impresionante. ¿para cuándo entrarás con un curso de RxJS con Angular?
Hola, ya pronto estamos lanzando la saga de Unit tests en Angular que también es impórtate y luego vamos a continuar con Rxjs y Redux para Angular.
Eso es fantástico Nico. De hecho hace unos días miré la agenda y encontré el set de cursos para pruebas. Es un área a la que no me he metido y que siento que es de gran importancia y mucho peso para uno en su perfil de desarrollador.
Nico. Al poner el switchMap() ¿la subscripción del route se elimina o queda viva?
Switchmap no hace otra cosa que devolver otro observable. Pero éste no elimina ni dessubscribe.
Sin embargo, hay observables de los cuáles no necesitamos preocuparnos. Como los son los del HttpClient y los de Route. Ya que implicitamente eliminan su subscripción al terminar su objetivo.
¿Cuándo desuscribirnos?
bastante picante el tema de rxjs y sus operators 👽
Muy buen curso del profe.Apoyemoslo.
En mi trabajo tengo muchas situaciones así. Vengo aprendiendo RxJS con el paso del tiempo a como el proyecto me lo va requiriendo. Y no conocía que era una mala práctica el tener un susbscribe dentro de otro.
Gracias!!
No es tan mala práctica tener al menos uno, si lo es tener más de dos subscribe dentro de otro y así. Pienso que hasta uno es aceptable. Pero si puedes utilizar este tipo de herramientas que aporta RxJS, mucho mejor!
Se me ocurría otra solución, usando el operador filter para no tener que hacer esa condición, luego si el switchmap directo y por último el operador take, para que en teoría el subscribe se complete