I have my resolver.ts
return this.wardrobeStateServ.init(this.categoryIndexes).pipe(take(1),
map((value) => value));
and my init function
init(categoryIndexes: number[]): Observable<boolean> {
if (this.firstSubWardrobeSubject.value === null) {
return this.http.get(`${AppConstants.itemsByCategoriesUrl}${categoryIndexes[0]}&include_images=true`).pipe(switchMap((firstResponse: any) => {
this.firstSubWardrobeSubject.next(firstResponse.data);
return this.http.get(`${AppConstants.itemsByCategoriesUrl}${categoryIndexes[1]}&include_images=true`).pipe(switchMap((secondResponse: any) => {
this.secondSubWardrobeSubject.next(secondResponse.data);
return this.http.get(`${AppConstants.itemsByCategoriesUrl}${categoryIndexes[2]}&include_images=true`).pipe(switchMap((thirdResponse: any) => {
this.thirdSubWardrobeSubject.next(thirdResponse.data);
if (categoryIndexes[3]) {
return this.http.get(`${AppConstants.itemsByCategoriesUrl}${categoryIndexes[3]}&include_images=true`).pipe(map((forthResponse: any) => {
this.forthSubWardrobeSubject.next(forthResponse.data);
return true;
}))
} else { return of(true) }
}))
}))
}))
} else { return of(true) }
}
Do you have any idea to simplify my code please? I want to have an array where I can loop with my http request.
But I tried with forkJoin but there is an asyn issue because result is always null
So now, this function is working but not so clean.
Help me please
let mapObj = new Map(); of(categoryIndexes) .pipe(mergeMap((value) => value)) .pipe(switchMap((res) => zip(of(res), of('Your http get request')))) .pipe(toArray()) .pipe(switchMap( res => { res.forEach( val => mapObj.set(val[0],val[1])) return of(mapObj); })) .subscribe((res) => console.log(res));I dont post it as an answer cause i dont know if it is what you want.