Angular 9-拦截器-如果catcherror中没有错误,返回什么?

Angular 9-拦截器-如果catcherror中没有错误,返回什么?,angular,interceptor,Angular,Interceptor,我在angular应用程序中有一个拦截器 整个想法是有一个有效期为30'的jwt令牌 偶尔我会从状态代码中得到一个错误,所以我会处理它 但是有时候,没有错误,所以我不想抛出任何异常 因为我没有返回任何东西,所以我得到了这个错误 您在需要流的地方提供了“未定义”。您可以提供一个可观察的、承诺的、数组的或可观察的。 除非我抛出像抛出者(“OK”)这样的假异常 这是我的截取函数 intercept(request: HttpRequest<any>, next: HttpHandl

我在angular应用程序中有一个拦截器

整个想法是有一个有效期为30'的jwt令牌

  • 偶尔我会从状态代码中得到一个错误,所以我会处理它

  • 但是有时候,没有错误,所以我不想抛出任何异常

因为我没有返回任何东西,所以我得到了这个错误

您在需要流的地方提供了“未定义”。您可以提供一个可观察的、承诺的、数组的或可观察的。

除非我抛出像抛出者(“OK”)这样的假异常

这是我的截取函数

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 
{
    
    return next.handle(request).pipe(catchError(err => 
    {
        const error = (err.error?err.error.message:null) || err.statusText;

        switch (err.status) {
            case 401:
            {
                // token expired -> goto login, dont return error
                this.appService.clearUserSession();
                this.router.navigate(['login']);
                <<<<<<<<<<<<<<< HERE I DON'T WANT TO THROW AN ERROR, WHAT TO RETURN ?
            }
            break;
            case 500:
            {
                return throwError(error);
            }
            break;
            default:
            {
                  if(error!="OK")
                  {
                       return throwError(error);
                  }
                  else
                  {
                       // some errors are "OK", just ignore them
                       <<<<<<<<<<<<<<< HERE I DON'T WANT TO THROW AN ERROR, WHAT TO RETURN ?
                  }
            }
            break;
       }
      
    }))

  }
intercept(请求:HttpRequest,下一步:HttpHandler):可观察
{
返回next.handle(request).pipe(catchError(err=>
{
常量错误=(err.error?err.error.message:null)| | err.statusText;
开关(错误状态){
案例401:
{
//令牌已过期->转到登录,不返回错误
this.appService.clearUserSession();
this.router.navigate(['login']);

正如错误所说,RxJS
catchError
操作符必须返回一个可观察的对象。但是当您希望不抛出错误时,可以使用RxJS函数返回一个有效的通知。它将调用可观察对象的
下一个
回调,而不是
错误

从'rxjs'导入{of};
拦截(请求:HttpRequest,下一步:HttpHandler):可观察的>{
返回next.handle(request).pipe(catchError(err=>{
常量错误=(err.error?err.error.message:null)| | err.statusText;
开关(错误状态){
案例401:{
//令牌已过期->转到登录,不返回错误
this.appService.clearUserSession();
this.router.navigate(['login']);
返回(错误)//