我用Http Interceptor编写了一个Angular 6 .,目标是在返回302 status时重新加载主页。我目前无法理解为什么HttpInterceptor的行为是这样的。
代码:
返回302 status的API调用在下面。this._service.checkStatus()调用返回302 http status的后端API
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中执行错误处理程序代码?
发布于 2019-01-11 20:00:14
用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);
})
)https://stackoverflow.com/questions/54147144
复制相似问题