Home > database >  I want to initialize my observable when I get 404 response from the API
I want to initialize my observable when I get 404 response from the API

Time:06-08

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.

  • Related