Recabamos en el mundo online para brindarte la respuesta para tu problema, si tienes alguna inquietud puedes dejarnos tu duda y te contestamos porque estamos para servirte.
Solución:
Http
envía errores por el flujo de errores de un observable, por lo que deberá detectarlos con .catch
(Puedes leer más sobre esto aquí).
return next.handle(request)
.do(event =>
if (event instanceof HttpResponse)
this.logger.logDebug(event);
)
.catch(err =>
console.log('Caught error', err);
return Observable.throw(err);
);
En ese momento estaba tratando Angular7+.
Desafortunadamente Las soluciones anteriores no sirvieron bien para el trabajo porque
.do
no está disponible directamente enHttpHandler
a partir de la noción de 6 tubos RxJs; y convertirObservable to Promise
no se pega
Aquí hay un enfoque limpio y actualizado; yo pipe
la catchError
operador y analice el error y finalmente vuelva a lanzarlo usando throwError
. Aquí está la forma final del interceptor;
intercept(req: HttpRequest, next: HttpHandler): Observable>
return next.handle(req).pipe(
catchError((error: HttpErrorResponse) =>
if (error.error instanceof ErrorEvent)
// client-side error or network error
else
// TODO: Clean up following by introducing method
if (error.status === 498)
// TODO: Destroy local session; redirect to /login
if (error.status === 401)
// TODO: Permission denied; show toast
return throwError(error);
)
);
Esperemos que esta solución ayude a alguien en el futuro.
Probablemente sea demasiado tarde para que lo use, pero con suerte alguien más lo encontrará útil… Esta es la forma de reescribir la declaración de retorno anterior para registrar también las respuestas de error:
return next.handle(request).do((event: HttpEvent) =>
if (event instanceof HttpResponse)
this.logger.logDebug(event);
, (error: any) =>
if (error instanceof HttpErrorResponse)
this.logger.logDebug(error);
);
Estoy usando esta misma metodología para enviar automáticamente todas las respuestas 401 no autorizadas directamente a nuestro método de cierre de sesión (en lugar de buscar un 401 en cada llamada individual a http):
return next.handle(request).do((event: HttpEvent) =>
if (event instanceof HttpResponse)
// process successful responses here
, (error: any) =>
if (error instanceof HttpErrorResponse)
if (error.status === 401)
authService.logout();
);
Funciona como un encanto absoluto. 🙂
Sección de Reseñas y Valoraciones
Finalizando este artículo puedes encontrar las reseñas de otros programadores, tú asimismo puedes dejar el tuyo si dominas el tema.