I want to initialize my observable when I get 404 response from the API I tried this code but it doesn't work
const urlParams = { email: this.email };
this.voicesProfileObservable$ = this.service.request<any>(
AVAILABLE_SERVICES.GET_USER_PROFILE_VOICES.ID,
{},
{ urlParams }
).pipe(
catchError((error) => {
this.voicesProfileObservable$ = Observable.of({
aboutSectionType: '',
aboutCustomizedDescription: '',
showSpacesFollowed: true,
showBadgesEarned: true,
showMobileNumber: true,
showOfficeNumber: false,
showEmail: true,
showSlackHandle: false,
video: {},
socialLinks: [],
personalLinks: [],
});
return throwError(error);
}))
Because you set this.voicesProfileObservable$ more times. Once when you define and declare it as an observable, and second time you do it in catchError().
You should catch the error, and return with of(...data) without throwing the error.
catchError(_ => of({
aboutSectionType: '',
aboutCustomizedDescription: '',
showSpacesFollowed: true,
showBadgesEarned: true,
showMobileNumber: true,
showOfficeNumber: false,
showEmail: true,
showSlackHandle: false,
video: {},
socialLinks: [],
personalLinks: [],
})
Maybe try it like this:
this.voicesProfileObservable$ = this.service.request<any>(
AVAILABLE_SERVICES.GET_USER_PROFILE_VOICES.ID,
{},
{ urlParams }
).pipe(
catchError((error) => {
return of({
aboutSectionType: '',
aboutCustomizedDescription: '',
showSpacesFollowed: true,
showBadgesEarned: true,
showMobileNumber: true,
showOfficeNumber: false,
showEmail: true,
showSlackHandle: false,
video: {},
socialLinks: [],
personalLinks: [],
});
})
)
You should return the default response directly inside the catchError callback to pass it down the subscribers.