首页 > 解决方案 > Angular HttpInterceptor - 参数类型不可分配

问题描述

我想创建自定义 HttpInterceptor 来验证 HttpResponse 是否具有状态 403 - 如果是,则向用户显示一个监视器。根据一些教程,我编写了以下代码:

@Injectable()
export class 403HttpInterceptor implements HttpInterceptor{

 constructor(){}

 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{

return next.handle(request).pipe(
  catchError((err:HttpErrorResponse)=>{
   if(err.status === 403){
    //display monit
   }
   return throwError(err);
})
);
}
}

然而仍然得到

参数类型 (err:HttpErrorResponse) => Observable 不可分配给参数类型 (err:any, caught:Observable)=>never

使用 Angular 7.2.10 和 rxjs 6.4.0

标签: angularangular-http-interceptors

解决方案


基于 Nicola 的回答,我想解释一下发生了什么。

您的代码现在需要返回一个 observable,它只是 next.handle() 返回。它也不能返回其他东西。因此,按照您编写的方式,catchError 也将返回该错误的可观察值。这就是 throwError 所做的。它来自 rxjs,是一种将错误转化为该错误的 Observable 的方法。

所以删除返回是这里的关键,因为你想处理错误,而不是返回它。

    return next.handle(request)
        .pipe(
            catchError((err: any) => {
                throw new Error(err);
            }),
        );

推荐阅读