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 {
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 {
this.apiService.getProduct(1)
.pipe(
switchMap(products => this.apiService.updateProduct(1, { name: 'Nuevo nombre' }) )
)
.subscribe(res => {
});
}
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.