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);
}))
CodePudding user response:
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: [],
})
CodePudding user response:
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.