I have successfully programmed HttpInterceptor which has
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<any> {
And it has proper catchError and throwError
catchError((error: HttpErrorResponse) => {
return throwError(error)
})
Everything is working fine
But I want to convert this to a non error HttpEvent so that I can receive both success and error inside the same callback of the HttpClient response how do I achieve that?
CodePudding user response:
If you want to receive the error-response in the same callback as the success-response you have to change the value of the status-property of the HttpResponse to 2xx. Otherwise it will still enter the error-callback. At the same time you can assign the original error-object to the body-property of your response:
intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
catchError((error: HttpErrorResponse) =>
of(new HttpResponse({
body: error,
status: 200, // if the status is not 2xx, it will enter the error-callback
statusText: 'OK'
}))
)
);
}
Note of caution: Modifying the status code of an http-response is usually not considered good practice, yet sometimes it can be a workaround.
