I have an array of Observable
contained in activatedRoute.data.example
and i want to subscribe to the latest value emitted.
private data$ = forkJoin(
this.activatedRoute.data.pipe(
map(({ examples }) => examples)
)
);
ngOnInit(): void {
this.data$.subscribe((v) => console.log(v));
}
Every example
here is an http request:
this.http.get<Example>(`${this.baseUrl}`, { params: query })
But I never see neither the log
nor the API call to the backend in the network browser's tab.
CodePudding user response:
map
of rxjs is not same as 'map' of Array.
Rough example of show it should actually work:
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
});
}
CodePudding user response:
map is an option, clearer way to do it with switchMap with from rxjs operators (you can also look for concatMap and mergeMap). So in the implementation, you can basically do:
this.activatedRoute.data.pipe(
map(({ examples }) => from(examples)),
switchMap((examples) => examples)
).subscribe(...);
If that was not helpful, I'm attaching a Stackblitz link .