在Angular 9中,拦截器可以用来处理HTTP请求和响应,并可以使用RxJS的catchError操作符来捕获并处理错误。如果catchError中没有错误,可以返回一个Observable对象,该对象发出特定的值或不发出任何值。
以下是一个示例代码,演示了如何在拦截器中使用catchError操作符处理HTTP请求的错误:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
intercept(request: HttpRequest, next: HttpHandler): Observable> {
return next.handle(request).pipe(
catchError((error: HttpErrorResponse) => {
// 处理错误逻辑
if (error.error instanceof ErrorEvent) {
// 客户端错误
console.error('An error occurred:', error.error.message);
} else {
// 服务器错误
console.error(`Backend returned code ${error.status}, body was: ${error.error}`);
}
// 返回一个空的Observable对象,不发出任何值
return throwError('No error'); // 或者返回其他特定的值
})
);
}
}
在上面的示例中,如果没有错误发生,拦截器会返回一个空的Observable对象,并使用throwError操作符将其转换为一个错误Observable,该错误Observable会发出一个特定的错误消息。你也可以根据需要返回其他特定的值。
请注意,拦截器的错误处理逻辑可能会根据你的应用程序需求而有所不同。上述示例仅提供了一个基本的错误处理流程。