我在Http Interceptor
中写了Angular 6 .
目的是在返回302 status
时重新加载主页。
我目前无法理解HttpInterceptor
的行为方式
代码:
下面是返回302 status
的 API调用。
this._service.checkStatus()
调用返回302 http status
API代码:
public checkStatus() : void {
this._service.checkStatus().subscribe(
(data) => console.log('success In checkStatus '),
(error)=>console.log('error In checkStatus')
);
}
拦截器代码:
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内执行错误处理程序代码?
答案 0 :(得分:2)
尝试使用catchError。
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);
})
)