Tengo algunas API que necesitan manejar la lógica comercial si la API arroja algún error. En este punto, uso un interceptor para manejar los errores de cualquier API. Esto funciona bien, pero no me permite llamar a la parte de "error" en la suscripción. A continuación, se especifica un fragmento de muestra para el escenario actual:
interceptador
import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpErrorResponse, HttpEvent, HttpRequest, HttpHandler } from '@angular/common/http'; import { catchError } from 'rxjs/operators'; import { Observable, of } from 'rxjs'; import { ToastrService } from 'ngx-toastr'; @Injectable() export class HttpErrorInterceptor implements HttpInterceptor { constructor(private toastr: ToastrService) { } intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(req).pipe( catchError((err, caught: Observable<HttpEvent<any>>) => { if (err instanceof HttpErrorResponse) { this.toastr.error(!err.error.message ? 'Internal Server Error' : err.error.message); return of(err as any); } throw err; }) ); } }Lo que quiero es que el interceptor funcione como está y me permita escribir la lógica comercial en la parte de error de la suscripción como se muestra a continuación:
componente
constructor(private http: HttpClientService) {} sampleMethod() { this.http.getAllData().subscribe({ next: response => { ... work on success response }, error: error => { ... perform specific task required on error scenario } // This is not running until & unless I write logic to skip this certain API in interceptor }); }He mostrado aquí el uso de una sola API, pero en mi requisito, tengo varios escenarios en los que necesito escribir la lógica en la parte de error y no quiero escribir mucha lógica en el interceptor.
¿Alguien puede proporcionarme algún ejemplo de cómo lograr este escenario?