Чтобы решить вашу проблему, я изменил код, показанный ниже.
onSubmit(): void {
if (this.form.valid) {
console.log('Creating product:', this.form.value);
this.http.post('/api/create', {
productName: this.form.value.productName,
}).pipe(catchError(errorResponse=> {
const err = <HttpErrorResponse>errorResponse;
if (err && err.status === 422) {
this.err = "Unprocessable Entity - Invalid Parameters";
return throwError(err);
} else if (err && err.status === 400) {
this.err = "Bad Request";
return throwError(err);;
} else if (err && err.status === 404) {
this.err = "Not found";
return throwError(err);;
} else if (
err &&
(err.status < 200 || err.status <= 300 || err.status >= 500)
) {
this.err = "Server Side Error";
return throwError(err);;
}
})
.subscribe(
resp => this.onSubmitSuccess(resp), err => this.onSubmitFailure(err)
);
}
this.formSubmitAttempt = true;
}
Я бы предложил создать общую службу исключений, которая обрабатывает любые исключения. Вы должны разделить исходящие вызовы API на отдельную службу, а затем использовать ее в своем компоненте. Код будет легко читать и поддерживать. Попробуйте следующий код logi c.
import { HttpErrorResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
@Injectable()
export class ExceptionService {
constructor(private toastService: ToastService) {}
catchBadResponse: (errorResponse: any) => Observable<any> = (
errorResponse: any
) => {
let res = <HttpErrorResponse>errorResponse;
let err = res;
let emsg = err
? err.error
? err.error
: JSON.stringify(err)
: res.statusText || 'unknown error';
console.log(`Error - Bad Response - ${emsg}`);
return of(false);
};
}
В своей службе вы можете создать такой метод публикации
saveEntity(entityToSave: EntityToSave) {
return <Observable<EntityToSave>>(
this.http.post(`${postURL}`, entityToSave).pipe(
map((res: any) => <EntityToSave>res),
catchError(this.exceptionService.catchBadResponse),
finalize(() => console.log('done'))
)
);
}
Из вашего компонента вызовите службу, которая обрабатывает исключение
this.yourService.saveEntity(entityToSave).subscribe(s => {
//do your work... this get called when the post call was successfull
});
Надеюсь, это решит вашу проблему.