Creé un servicio en Java que devuelve como observable un mapa <k, mapa <k, v>> y estoy intentando iterar a través del mapa externo con un foreach. Estoy luchando por.
[...] .then( (response: Package) => { response.activityMap.forEach((key: string, value: Map<string, number>) => { //do something }); } ) [...]El paquete es un tipo con los siguientes parámetros:
export interface Package{ diagnostic?: Diagnostic; activityMap?: { [key: string]: { [key: string]: number; }; }; }Lo que estoy tratando de hacer es crear un forEach que itere a través del mapa "padre", por lo que para cada clave //haga algo
Pero no me deja usar foreach:
Esta expresión no es invocable. Escriba '{ [clave: cadena]: número; }' no tiene firmas de llamada.
Dado que está devolviendo un observable, primero debe suscribirse al observable, luego puede iterar los valores devueltos.
Hay 2 enfoques en orden de cómo manejamos las suscripciones
this.myService.getPackage().subscribe((response: Package) => { response.activityMap.forEach((key: string, value: Map<string, number>) => { //do something }); })También asegúrese de cancelar la suscripción para evitar que su aplicación tenga pérdidas de memoria.
Puede hacerlo con el operador TakeUntill RxJS https://www.digitalocean.com/community/tutorials/angular-takeuntil-rxjs-unsubscribe
O
En lugar de suscribirse, puede usar canalizaciones asíncronas, lo que se considera una buena práctica https://blog.angular-university.io/angular-reactive-templates/
En lugar de iterar dentro de la suscripción, recomendaría que use el operador de mapa RxJS combinado dentro de una tubería https://rxjs.dev/api/operators/map