首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角6 HttpInterceptor正确行为

角6 HttpInterceptor正确行为
EN

Stack Overflow用户
提问于 2019-01-11 13:05:52
回答 1查看 495关注 0票数 2

我用Http Interceptor编写了一个Angular 6 .,目标是在返回302 status时重新加载主页。我目前无法理解为什么HttpInterceptor的行为是这样的。

代码:

返回302 status的API调用在下面。this._service.checkStatus()调用返回302 http status的后端API

API代码:

代码语言:javascript
复制
public checkStatus() : void  {


      this._service.checkStatus().subscribe(

        (data) => console.log('success In checkStatus '),
        (error)=>console.log('error In checkStatus')
      );

 }

拦截器码:

代码语言:javascript
复制
export class MyInterceptor implements HttpInterceptor{


    constructor(){

    }

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

        console.log('inside interceptor' );
        return next.handle(request).pipe(

        tap(
                event =>{
                },
                error=>{
                    console.log(error);

                    if (error instanceof HttpErrorResponse) {
                        if (error.status === 302) {
                            window.location.reload();                      
                        }
                      }
                }
            )
       );

    }

}

发行:

现在的问题是,当302 status返回时,(error)=>console.log('error In checkStatus')行仍将在API - checkStatus调用中执行。

我的问题是,为什么API调用中的错误处理程序仍然会被调用。也就是说,在返回302之后,页面将使用window.location.reload()重新加载。

但是错误处理程序(error)=>console.log('error In checkStatus')仍然会被调用。

需要做些什么来防止在checkStatus API中执行错误处理程序代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-11 20:00:14

用catchError试试。

代码语言:javascript
复制
return next.handle(request).pipe(   

     tap((event: HttpEvent<any>) => {
       console.log('tap', event);
     }),

     catchError(error => {

       console.log('catchError', error);

       if (error instanceof HttpErrorResponse) {
         if (error.status === 302) {
           window.location.reload();                      
         }
       }

       return throwError(error);     
     })
  )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54147144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档