Я работаю в http обработка ошибок. Я написал обработку ошибок в каждом компоненте, что не является хорошей практикой кодирования. Поэтому я решил написать обычную обработку ошибок http по всему миру. Я искал его, я наткнулся на концепцию http-interceptor
, я думаю, что существует лучший способ обработки ошибок HTTP. То, что я пробовал в каждом компоненте, приведено ниже. Вместо этого мне нужен глобальный метод. У меня уже есть файл http-interceptor, и код, который я вставляю ниже.
компонент.ts:
this.serviceName.methodName().catch(err => {
console.info("Something went wrong with the request, please try again.");
return Observable.throw(err.message.toUpperCase() || 'API_ERROR');
}).subscribe((res) => {
console.info(res);
},
error=>{
this.openSnackBar('danger', "Something went wrong with the request, please try again.");
});
http-перехватчик:
import { Injectable } from "@angular/core";
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse } from "@angular/common/http";
import { Observable } from "rxjs";
import { tap } from 'rxjs/operators';
@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
constructor() { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(tap(
event => event instanceof HttpResponse ? 'succeeded' : '',
err => 'failed'
))
}
}
Пожалуйста помоги. Спасибо.
Попробуй это:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(tap(
event => event instanceof HttpResponse ? 'succeeded' : '',
err => {
this.openSnackBar('danger', "Something went wrong with the request, please try again.");
}
))
}
Спасибо за ответ, у меня уже есть файл http-interceptor, пожалуйста, проверьте мой ответ еще раз. Пожалуйста, предложите, где написать код «ошибки» из вашего ответа в моем файле http-interceptor.
Получение ошибки после добавления вашего кода, такого как ERROR in src/app/services/common/httperror.interceptor.ts(15,13): error TS2345: Argument of type '(error: any) => void' is not assignable to parameter of type '() => void'.