Tengo una matriz de Observable contenida en activatedRoute.data.example y quiero suscribirme al último valor emitido.
private data$ = forkJoin( this.activatedRoute.data.pipe( map(({ examples }) => examples) ) ); ngOnInit(): void { this.data$.subscribe((v) => console.log(v)); } Cada example aquí es una solicitud http:
this.http.get<Example>(`${this.baseUrl}`, { params: query }) Pero nunca veo ni el log ni la llamada API al backend en la pestaña del navegador de red.
map es una opción, una forma más clara de hacerlo con switchMap con los operadores rxjs (también puede buscar concatMap y mergeMap). Entonces, en la implementación, básicamente puedes hacer:
this.activatedRoute.data.pipe( map(({ examples }) => from(examples)), concatMap((examples) => examples) ).subscribe(...);Si eso no fue útil, adjunto un enlace de Stackblitz .
el map de rxjs no es lo mismo que el 'mapa' de Array.
Ejemplo aproximado de mostrar que realmente debería funcionar:
private data$: Observable; ngOnInit(): void { let getExample = (query) => this.http.get < Example > (`${this.baseUrl}`, { params: query }); this.activatedRoute.data.subscribe(({ examples}) => { // if example is array let obsArray: Observable[] = Object.entries(examples).map(([key, value] => getExample({ [key]: value })); data$ = forkJoin(obsArray); data$.subscribe(); // if needed }); }Resolví devolver directamente el forkJoin() del Observable s desde el resolver, y luego suscribirme a ese Observable a través de un ReplaySubject