I have an angular application where I am trying to get an array of sources for an image carousel. How I have it set up currently I have a "getUrls()" method to get the urls from the database like so
http.service.ts:
getUrls() {
this.http
.get<string[]>(
'<DATABASE_LINK>'
)
.subscribe((imageUrls: string[]) => {
this.carouselService.setUrls(imageUrls);
});
}
That method calls the method "setUrls" to set them into an array stored in a service
carousel.service.ts:
urls: string[] = [];
constructor() {}
setUrls(urls: string[] | []) {
this.urls = urls || [];
debugger;
}
getImages() {
debugger;
return this.urls;
}
Then inside of the carousel component I call both of the previous methods in ngOnInit
image-carousel.component.ts:
ngOnInit(): void {
this.httpService.getUrls();
this.images = this.cService.getImages();
}
This would then assign the values set by the "setUrls()" method, but for some reason, it is reaching the "getImages()" method before setting the Urls.
I got it to work by taking the "getImages()" line into a separate method and clicking a button to call it, so that I could make sure that everything worked in the right order and it did, however I want it to do all of that when the components are initialized.
I am sure I am missing something, so anything helps, even if I have to refactor a lot.
I tried to use a ".pipe(tap()" in the "getUrls()" method instead of a subscribe, however it would never call the "setUrls()" method.